プライベート メンバーで非 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 サイトの他の関連記事を参照してください。