C++11のauto指定子について

C++11では新たにautoという指定子が導入されるらしい.C++は静的な型付けの言語なのでint foo; といったように,変数に必ず型を指定する必要があるが,autoではコンパイル時に型推論を行ってくるためauto foo = 1; とすると勝手にfooがint型になってくれるそうだ.

コードにすると以下のようになり,変数bを勝手にintと推測してくれる.

int  a = 100;
auto b = a;


これだけ見ると,だからどうしたと思われるが,C++STLやboostのiteratorやらを使うと行数が長くなって,もう人間の読めないコードが出来上がる.例えば次のコードは典型的なmapのiterationであるが,もう,何この長さ.長い文章を書き写して修行する写経ですか,となる.

std::map<int, int> dict;

for (std::map<int, std::string>::iterator it = dict.begin(); it != dict.end(); ++it) {
}


ところがauto指定子を使うと以下のように書けるらしい.うわぁ,これじゃ動的型付けのスクリプト言語じゃないですか.なんだこれは・・・たまげたなあ.

std::map<int, std::string> dict;

for (auto it = dict.begin(); it != dict.end(); ++it) {
}


実は,C++11ではfor eachのような構文もあって上のコードよりも簡潔に書けるのだけれど,autoの有効性を見るには良い例なのではないかと思う.auto指定子があるだけで,大分コードが綺麗に書けそう.