(コンストラクターを持たない) 構造体/クラスのオブジェクトは、初期化リストを使用して作成できます。これがコンストラクターを持つ構造体/クラスで許可されないのはなぜですか?
struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
(コンストラクターを持たない) 構造体/クラスのオブジェクトは、初期化リストを使用して作成できます。これがコンストラクターを持つ構造体/クラスで許可されないのはなぜですか?
struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
いいえ、コンストラクターを持つオブジェクトは、POD(プレーンな古いデータ)とは見なされなくなりました。オブジェクトには、非静的メンバーとして他のPODタイプ(基本タイプを含む)のみが含まれている必要があります。PODは、静的関数と静的な複雑なデータメンバーを持つことができます。
今後のC++標準では、初期化子リストを定義できるようになります。これにより、非PODオブジェクトを中括弧で初期化できるようになります。
あなたの質問によってあなたが尋ねるつもりなら、「私はこれをすることができますか:」
struct MyGizmo
{
char things_[5];
MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};
...そして答えはノーです。C++ではこれは許可されていません。