2014-09-04 83 views
6

這裏是我的代碼:?無法生成時,類成員(在C++)參考默認賦值運算符

class NO { 
    public: 
    NO(std::string& name):nameValue(name){}; 

    private: 
    std::string& nameValue;   // this is now a reference 

}; 

int main(){ 

    int b=10,c=20; 
    int& d=b; 
    d=c; 

    std::string p="alpha", q="beta"; 

    NO x(p), y(q); 
    x=y; 

    return 0; 

} 

我得到的錯誤:

"non-static reference member ‘std::string& NO::nameValue’, can’t use default assignment operator" 

爲什麼我不能再 - 當我可以用內建類型做同樣的事情時,將對象與引用成員分配?

謝謝

+0

我覺得這應該工作,但...什麼語義?我們必須期待什麼? 'x.nameValue'必須指向'y.nameValue'或''x.nameValue''必須複製'y.nameValue'的值? (這與「p = q」的做法是一樣的) – 2014-09-04 08:54:50

回答

4

引用可以初始化,但不能分配給。一旦引用被初始化,只要它存在,它就會繼續引用相同的對象。如果你沒有定義一個賦值運算符,編譯器會合成一個進行成員賦值的賦值運算符,但在這種情況下這是不可能的,所以編譯器根本無法合成。

您可以自己定義一個賦值操作符。這取決於你決定如何處理一個參考的成員。大多數情況下,您只是將對象定義爲不包含任何引用。

當你想到它時,主要用於引用幾乎肯定是作爲參數。作爲一個班級的成員,他們經常沒有意義,在極少數情況下他們確實有意義,那個班級的對象可能不應該支持分配。