9

(コンストラクターを持たない) 構造体/クラスのオブジェクトは、初期化リストを使用して作成できます。これがコンストラクターを持つ構造体/クラスで許可されないのはなぜですか?

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
4

2 に答える 2

14

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

今後のC++標準では、初期化子リストを定義できるようになります。これにより、非PODオブジェクトを中括弧で初期化できるようになります。

于 2010-01-19T18:04:06.623 に答える
0

あなたの質問によってあなたが尋ねるつもりなら、「私はこれをすることができますか:」

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

...そして答えはノーです。C++ではこれは許可されていません。

于 2010-01-19T18:11:13.550 に答える