C++11ではautoというキーワードが加わっている。Modern Effective C++にも、autoについて一章分かけて解説してある。
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
- 作者: Scott Meyers,千住治郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/18
- メディア: 大型本
- この商品を含むブログ (5件) を見る
autoを使うことによって、明らかな型推論の部分を省略して記述することができる。例えば、これまでのC++では、STLのiteratorを明示的に宣言しなければならなかった。
std::vector<int>iterator it = m_vector.begin(); while (it != m_vector.end()) { イテレータの処理 it++; }
しかし、このイテレータの処理は、毎回書かなければならない割には長くて面倒だ。それに、間違えやすく、ソースコードの横方向を短かくしたいなかで、イチレータの宣言だけでこんなに苦くなってしまうのはあまり良くないと思う。
そこで、autoを使って型推論をして、イテレータを宣言してみる。以下のようになる。
auto it = m_vector.begin(); while (it != m_vector.end()) { イテレータの処理 it++; }
このauto宣言によって、itはm_vector.begin()と等価であることからイテレータであると推論され、std::vector
当然ならがら実際にはイテレータとして実行されるため。今回の改造で、イテレータを使っている部分は以下のような記述になった。
for (auto it = m_hier_skip_func.begin (); it != m_hier_skip_func.end (); it++) { if ((*it)->first == func_symbol) { m_hier_func_in_skip = true; if ((*it)->second == InstSkip) { m_hier_debug_in_skip = true; } fprintf (GetTraceHierFp(), " ..."); break; } it++; }
この方が、イテレータのためにいろいろ記述しなくても良いのですっきりだ。