質問

struct/classのオブジェクト(それはありません コンストラクタ)を使用して作成できます 初期化リスト. 。なぜこれがstruct/classで許可されていないのですか コンストラクタ?

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
役に立ちましたか?

解決

いいえ、コンストラクターを備えたオブジェクトは、もはやポッドとは見なされません(平凡な古いデータ)。オブジェクトには、他のポッドタイプのみが非静的メンバー(基本タイプを含む)を含める必要があります。 PODには、静的関数と静的な複雑なデータメンバーを持つことができます。

今後のC ++標準を使用すると、初期化リストを定義できることに注意してください。これにより、非Podオブジェクトをブレースで初期化できるようになります。

他のヒント

あなたの質問によって、あなたが「これをすることはできますか:」と尋ねることを意味する場合は、

struct MyGizmo
{
  char things_[5];
  MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};

...それなら答えはノーです。 C ++はこれを許可しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top