クラス内初期化子(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に関する現在の問題に関連しています。)confusing
Overloaded
中括弧を要求することで、このあいまいさがなくなります。
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing{Overloaded}; // <-- This line
};
関数宣言として読み取る方法がないため、confusing
が実際にint
は の値に初期化されていることは明らかです。Overloaded
お役に立てれば!