2014-09-04 42 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

引用可以初始化,但不能分配给。一旦引用被初始化,只要它存在,它就会继续引用相同的对象。如果你没有定义一个赋值运算符,编译器会合成一个进行成员赋值的赋值运算符,但在这种情况下这是不可能的,所以编译器根本无法合成。

您可以自己定义一个赋值操作符。这取决于你决定如何处理一个参考的成员。大多数情况下,您只是将对象定义为不包含任何引用。

当你想到它时,主要用于引用几乎肯定是作为参数。作为一个班级的成员,他们经常没有意义,在极少数情况下他们确实有意义,那个班级的对象可能不应该支持分配。