gpt4 book ai didi

c++ - this 和 const 深入

转载 作者:行者123 更新时间:2023-11-28 07:17:23 30 4
gpt4 key购买 nike

有人可以详细介绍关于自赋值的运算符重载中的 *this 和 const

例如:

Class& Class::operator=(const Class& other)
{
a = other.a
b = other.b

return *this;
}

我对实际返回的内容感到困惑,我是否将自己的取消引用指针返回给自己?这真的是 self 分配的工作方式吗?我总觉得还有更多的东西,我知道这在前面的例子中已经解释过了,但我更关心为什么它会得到“const”并返回“*this”

此外,与明确地说 a = other.a 相比,如果我实际复制 const 的值,会有区别吗?这会更低效还是应该那样? - 首先复制 const,然后将 a 分配给拷贝的值。

如果我返回“this”,我会返回一个指向我自己的指针吗?我对这个话题很困惑。

最佳答案

自从我使用 C++ 以来已经有一段时间了,希望我记得正确的细节。

对于我是否将我自己的取消引用指针返回给我自己?
是的,这是正确的。这是因为赋值函数返回一个引用(因此您需要引用 this 指针,以便函数可以返回对该对象的引用)。

这真的是 self 分配的工作方式吗?
是的。

赋值运算符(我更倾向于将其视为赋值函数)的参数是 const 是正确的,因为您不想更改传入的内容(避免副作用)。

但是,您应该通过检查传入对象的地址与 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,他们 x 被赋值为 y,因此返回引用(这是赋值运算符需要的输入)。

希望对您有所帮助。

关于c++ - this 和 const 深入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019662/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com