2011/11/09

[c++11]autoってのがあるんだ

発端は、この記事であった。

http://news.mynavi.jp/news/2011/11/04/014/index.html

 

C++好きだといいながらも、あんまり最近C++使ってないし、動向も見てなかった。
せっかくなので、この記事を眺めて雰囲気だけでも味わってみよう、などと考えていた。

 

しかし、最初の項目を見て驚いた。

map<int,string>::iterator i = m.begin();  //C++98

auto i = begin(m);  //C++11

 

なんと!
autoって、自動変数のautoかと思ったら、定義自体が違うではないか!!

そしてこれは、理にかなっていると思った。
C++には引数が異なる関数の多重定義はあるけれども、戻り値が異なる多重定義はない(よな?)。
だから、引数が決まった時点で、戻り値も決まることになる。
一時的に使いたい変数程度なら、わざわざ型指定とかしなくてもautoでいい、ということになる。
そしてそうした方が、戻り値の型を書くよりも安全だ。

 

組込みでソースを書いていると、型をきっちり、ということを強いられる。
で、これがけっこうめんどくさい。
ソースが流動的なときなんかは、戻り値の型が変わってしまったりして、関係するところを洗い出さないといけん、とか。

まあ、静的解析ツールにかけたり、コンパイラでwarningレベルを上げたりってのもあるけど、言語レベルでサポートされると気が楽だ。
コードレビューの時なんかは、「autoを使っていないとこだけ確認」とかで済むし。

 

それよりも、というと変だが、autoの意味合いが変わっているところに驚きを感じた。
これはもう、C/C++ではなく、C++11という言語と考えてもいいんじゃないだろうか。
もっと知らねば・・・。

 

とりあえずC言語でもほしいのは「namespace」「新auto」「nullptr」かな。
nullptrは、以前から疑問に思っていたNULLチェックに対して答を与えてくれるものかもしれない。
今日は読んでないのだけど、早く読んでしまおう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。