我正在用这样的 const 引用编写类:
class B;
class foo {
const B& b;
foo(const B& newb): b(newb) { }
void operator=(const foo & foo2) {
// This does not work
foo.b = foo2.b;
}
};
我正在尝试定义一个有效的运算符 = 显然 = 不起作用,因为不允许我更改 const 引用。这有办法让引用指向另一个对象吗?
如果 b 不是 const,C++ 将为我提供一个有效的 operator=。如果我将一个成员定义为 const cl 将吐出:
警告 C4512:“foo”:无法生成赋值运算符
最佳答案
您要查找的术语是“重新绑定(bind)”。如“是否可以重新绑定(bind)引用?”答案是“不,引用被定义为不可重新绑定(bind)”。但是您可以使用指针并更改它指向的内容:
class B;
class foo {
B* b;
foo(const B& newb)
{
b = &newb;
}
void operator=(const foo& foo2)
{
b = &foo2.b;
}
};
但是,如果被赋值的对象比用于赋值的对象存在时间更长(顺便说一句,构造函数也有同样的问题),这就有悬空指针的风险。您很有可能根本不需要引用或指针:
class B;
class foo {
B b;
foo(const B& newb): b(newb) { }
void operator=(const foo& foo2)
{
b = foo2.b;
}
};
如果您确实需要指针/引用(也许 B
是一个基类),那么您将需要研究智能指针来处理对象生命周期问题。
关于c++ operator= const 引用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408804/