デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4387  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

C++11ではnon-static data member initializerが導入され、クラスの初期値設定をよりわかりやすく行うことが出来るようになっています。

struct X {
  int a = 10; // Xの初期値は10
  X() : a(10) /* これと同じ */ {}
};

この初期化子ではthisを使用することもできます。

struct X {
  size_t sz = sizeof(*this); // これは可能
  int arr[sizeof(*this)];  // でもこれは不可
};

さて、gcc-4.7では以下のコードのコンパイルが通ってしまいます。

struct X {
  void f() {
    struct Y {
      size_t sz = sizeof(*this); // Yのサイズ

      int arr[sizeof(*this)]; // エラーのはずだが…
  };

};

この時Y::szにはYのサイズが、Y::arrの要素数にはXのサイズが適用されています。バグでしょうね。

なお、Clangではエラーを出力してくれます。

投稿日時 : 2012年4月14日 12:16

コメント

No comments posted yet.

Post Feedback

タイトル
名前
Url:
コメント: