C ++:struct/classのコンストラクターと初期化リスト
-
21-09-2019 - |
質問
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 ++はこれを許可しません。
所属していません StackOverflow