有人可以详细了解* this和const在运算符重载方面的自我分配
例如:
Class& Class::operator=(const Class& other)
{
a = other.a
b = other.b
return *this;
}
我对我实际返回的内容感到困惑,我是否将自己的一个解除引用的指针归还给自己?这真的是自我分配应该如何运作?我总觉得它还有一点点,我知道这在前面的例子中得到了解释,但我更关心为什么它会变成“const”并返回“* this”
另外明确地说a = other.a,如果我制作了const值的实际副本,会有区别吗?这样效率会更低还是应该那样? - 首先复制const,然后将a指定给副本的值。
如果我回复“这个”,我会回到自己的指针吗?我对这个话题感到很困惑。
答案 0 :(得分:1)
我使用C ++已经有一段时间了,希望我能正确记住细节。
对于我是否将自己的解引用指针返回给自己?
是的,这是正确的。这是因为赋值函数返回一个引用(所以你需要使用this指针,这样函数就可以返回对象的引用)。
这真的是自我分配应该如何运作吗?
是。
赋值运算符的参数(我更倾向于将其视为赋值函数)是正确的,因为您不想更改传入的内容(避免副作用)。
但是,您应该通过检查传入此指针的对象的地址来测试是否要为自己分配项目。有关参考,请参阅C++ : Implementing copy constructor and copy assignment operator。以你的例子:
Class& Class::operator=(const Class& other)
{
if ( this != &other )
{
a = other.a
b = other.b
}
return *this;
}
如果我没记错的话,做多个作业的例子说明了作业的原因。如果您有x,y,z并且您执行了以下操作, X = Y = Z
然后y被赋予z,并且它们分配y,因此返回引用(这是赋值运算符所需的输入)。
希望有所帮助。