ホームページ > バックエンド開発 > C++ > 同じ名前のコンストラクターの初期化: C 標準に準拠していますか?

同じ名前のコンストラクターの初期化: C 標準に準拠していますか?

Patricia Arquette
リリース: 2024-11-15 10:18:03
オリジナル
405 人が閲覧しました

Constructor Initialization with Same Name: C   Standard Compliance?

同じ名前を使用したメンバー変数のコンストラクターの初期化: C 標準準拠?

質問:

それは 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート