C++11 に合った書き方
仕様の確定
C++0x と言われていた C++ の次期仕様が少し前に確定しました。
結局、紆余曲折を経たため、当初の予定だった 2009 年の間には確定させることができず、2011 年までずれこんでしまったようです。
私自身は、わりと C++ が好きな方なので、時々は新しい仕様をチェックしたりしていました。
個人的には、今回の仕様のうちでlambda
の導入やスマートポインタの充実、auto
など型推論の強化などが、特に嬉しいポイントです。
いずれも、これまでに不満を感じていた箇所でした。
Ruby をよく使うようになってから、特に型情報の記述量の多さには不満を感じていたので、型推論の強化は非常に歓迎しています。
C++11 らしい書き方とは
そんな新機能がいろいろと追加された C++ ですが、Elements of Modern C++ Styleに、今後、C++11 を使用していく上で推奨されるコーディングスタイルについて、まとめられていました。
順に見ていこうと思います。
auto
一つ目の例としては、以下のようなものが挙げられていました。
つまり、右辺を見ることで型がはっきりする場合は、省略してしまおうというのが基本スタンスのようです。
これまでは、インスタンスの動的生成などは、多態性を使わない場合には無駄そのものである以下のような書き方をしていました。
C# のvar
を見るたびに、こういったものが C++ にもあればよいのにと思っていたので、これが正式仕様になったのは喜ばしいことです。
ただ、一方で、例の二番目のような場合については、好みが分かれるのではないかと思いました。
config
の定義 (おそらくmap
など) を見れば、すぐにxlimit
の型が分かるのですが、少なくともコードの一部分を見ている人間には、すぐには何か分かりません。
そういう意味で、関数の返り値などで変数を宣言と同時に初期化する場合には、auto
を使うかどうかは難しいところだと思います。
おそらくは、STL のようなライブラに含まれるかどうかを基準とするのがよいのではないかと思います。広く知られたライブラリの関数であれば、返り値の型が判明しているので、変数の型を省略してauto
にしてしまってもよいように思いました。
続く。
0 件のコメント:
コメントを投稿