質問:
それは C の範囲内ですか?メンバー変数と同じ名前を共有するコンストラクター引数を使用してメンバー変数を初期化する標準?
例:
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} };
答え:
はい、これは合法であり、C 標準に従って動作することが保証されています。
説明:
C のセクション 12.6.2/7標準では、「mem-initializer の式リスト内の名前は、mem-initializer が指定されているコンストラクターのスコープで評価される」と記載されています。つまり、コンストラクター引数とメンバー変数は別個のエンティティですが、同じ名前を使用します。
これにより、例に示すように、コンストラクター引数の値でメンバー変数を初期化できます。
注:
オブジェクトの不必要なコピーを避けるために、コンストラクター引数には const 参照を使用することをお勧めします。したがって、
Blah(const std::vector<int> &vec): vec(vec) {}
以上が同じ名前のコンストラクターの初期化: C 標準に準拠していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。