クラス内初期化子(C++11 機能) は、中かっこで囲むか、= 記号を続ける必要があります。括弧内に指定することはできません。
これの理由は何ですか?
クラス内初期化子(C++11 機能) は、中かっこで囲むか、= 記号を続ける必要があります。括弧内に指定することはできません。
これの理由は何ですか?
私はこれについて 100% 肯定的ではありませんが、これは構文のあいまいさを防ぐためかもしれません。たとえば、次のクラスを考えてみます。
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing(Overloaded); // <-- This line
};
表示された行は何を意味しますか? 書かれているように、これは、 (関数宣言で名前が指定されていないconfusing) 型のオブジェクトをパラメーターとして受け取り、Overloadedを返す、という名前のメンバー関数の宣言intです。C++11 で初期化子が括弧を使用できるようにすると、データ member の値に初期化されるint名前付きの型のメンバーの定義になる可能性があるため、あいまいになります。(これは、Most Vexing Parseに関する現在の問題に関連しています。)confusingOverloaded
中括弧を要求することで、このあいまいさがなくなります。
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing{Overloaded}; // <-- This line
};
関数宣言として読み取る方法がないため、confusingが実際にintは の値に初期化されていることは明らかです。Overloaded
お役に立てれば!