ホームページ >バックエンド開発 >C++ >同じ名前のコンストラクター引数を使用して C メンバー変数を初期化できますか?

同じ名前のコンストラクター引数を使用して C メンバー変数を初期化できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-12 10:53:09774ブラウズ

Can C   Member Variables Be Initialized Using Constructor Arguments with the Same Name?

同じ名前のコンストラクター引数によるメンバー変数の初期化

C では、同じ名前のコンストラクター引数を使用してメンバー変数を初期化できます。メンバー変数として。以下の例で示すように、この手法は、 g 4.4 および clang でコンパイルした場合に、警告やエラーが発生せずに動作することが確認されています。

class Blah {
    std::vector<int> vec;

public:
    Blah(std::vector<int> vec): vec(vec) {}

    void printVec() {
        for (unsigned int i = 0; i < vec.size(); i++)
            printf("%i ", vec.at(i));

        printf("\n");
    }
};

C 標準 (§12.6.2/7) によれば、この初期化は合法であり、動作することが保証されています。 mem-initializer の式リスト内の名前はコンストラクターのスコープ内で評価され、初期化されるオブジェクトを参照するために this ポインターを使用できるようになります。

上記の例では、コンストラクターの引数vec は、同じ名前のメンバー変数 vec に初期化されます。この初期化は、クラス Blah のオブジェクトが作成されるたびに行われます。

推奨事項

元のベクター オブジェクトの不必要なコピーを避けるために、コンストラクター パラメーターを const 参照として受け入れることを検討してください。 、以下に示すように:

Blah(const std::vector<int> &amp; vec): vec(vec) {}

以上が同じ名前のコンストラクター引数を使用して C メンバー変数を初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。