class member initializationはC++のクラスをはじめて触る人が必ずやる初期化でしょう。
・C++11
class C { int x = 7; //これ public: C(); };
メンバの宣言に初期化を定義することが出来、これによってクラスCのオブジェクトは全てx=7で初期化されることになります。これはC++11以前は以下のように記述する必要がありました。
・C++11以前
class C { int x; public: C() : x(7) {} };
全てのコンストラクタで宣言しなければならないということと、、xの宣言と初期化が別の行に書かれることなどの理由からC++11でclass member initializationが導入されました。
しかしながらこのclass member initialization、MSVC2012は対応していない模様。
MSのドキュメントに詳しく記載されています。
Support For C++11 Features (Modern C++)
実際にC++Standardに従っているコンパイラはあまりないということでしょう。c++11対応といってもその機能の全てを網羅しているとは限らない。
リンク先の表を見てみると、よく使われる機能から順に実装されている様子。
class member initializationも2013から対応しています。
MSVC2012依存のプロジェクトはご注意を。
C++11のこういった機能の追加はコンパイラ技術の向上の賜物でしょう。C++の様々な非直感的な仕様は実はコンパイル時(構文解析時)の制約の為なのですが、だんだんと進歩していっているようです。
C++11のこういった機能の追加はコンパイラ技術の向上の賜物でしょう。C++の様々な非直感的な仕様は実はコンパイル時(構文解析時)の制約の為なのですが、だんだんと進歩していっているようです。
0 件のコメント:
コメントを投稿