首頁 > 後端開發 > C++ > 主體

使用非常量左值引用初始化私有成員時如何解決綁定錯誤?

Barbara Streisand
發布: 2024-10-30 01:46:02
原創
295 人瀏覽過

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

解決綁定錯誤:將左值引用轉換為右值

使用需要非常量左值引用的私有成員構造對象時構造函數,就像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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!