use*_*632 6 c++ default reference variable-assignment operator-keyword
这是我的代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
"non-static reference member ‘std::string& NO::nameValue’, can’t use default assignment operator"
Run Code Online (Sandbox Code Playgroud)
当我可以使用内置类型执行相同操作时,为什么不能使用引用成员重新分配对象?
谢谢
可以初始化引用,但不能对其进行赋值。一旦引用被初始化,只要它存在,它将继续引用同一个对象。如果您没有定义赋值运算符,编译器将合成一个进行成员赋值的运算符,但在这种情况下这是不可能的,因此编译器根本不能/不会合成一个。
您可以自己定义赋值运算符。由您来决定如何与作为参考的成员打交道。大多数时候,您只需将对象定义为不包含任何引用。
当你认真思考时,引用的主要用途几乎肯定是作为参数。作为类的成员,它们通常没有意义,并且在它们确实有意义的极少数情况下,该类的对象可能不应该支持分配。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |