使用需要非常量左值引用的私有成員構造對象時構造函數,就像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 成員。這種方法可以避免錯誤,同時保持預期的行為。
以上是使用非常量左值引用初始化私有成員時如何解決綁定錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!