ホームページ >バックエンド開発 >C++ >非 Const 左辺値参照を使用してプライベート メンバーを初期化するときにバインド エラーを解決するにはどうすればよいですか?

非 Const 左辺値参照を使用してプライベート メンバーを初期化するときにバインド エラーを解決するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 01:46:02375ブラウズ

 How to Resolve Binding Errors When Initializing Private Members with Non-Const Lvalue References?

バインディング エラーの解決: 左辺値参照から右辺値への変換

プライベート メンバーで非 const 左辺値参照を必要とするオブジェクトを構築する場合Foo の場合と同様に、コンストラクターでは、適切な値を渡すのが難しい場合があります。 Foo クラスの変更は常に実現可能であるとは限らず、生のポインターの使用は望ましくありません。

この状況では、エラーは、'int&' 型の左辺値参照を 'int' 型の右辺値にバインドしようとすることから発生します。 Bar クラスのプライベート メンバー 'f' を初期化しています。 Foo コンストラクターは、この例のように、'genValue()' が整数を返す一時的な値ではなく、名前付き変数を期待します。

この問題に対処するには、代わりに値で引数を Foo コンストラクターに渡すことを検討してください。参考の。これにより、「genValue()」によって返された整数のコピーが作成され、Foo オブジェクトの「x」メンバーに割り当てられます。

修正されたコードは次のとおりです。

<code class="cpp">class Foo {
public:
    Foo(int x) { // Pass by value
        this->x = x;
    }
private:
    int x;
};

class Bar {
public:
    Bar(): f(genValue()) { // Pass by value
    }
private:
    Foo f;

    int genValue() {
        int x;
        // do something ...
        x = 1;
        return x;
    }
};</code>

genValue() 戻り値を実引数として渡すことにより、コンパイラーは一時変数の値を Foo オブジェクトの x メンバーに割り当てます。このアプローチにより、意図した動作を維持しながらエラーが回避されます。

以上が非 Const 左辺値参照を使用してプライベート メンバーを初期化するときにバインド エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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