cuốn sách gpt4 ai đã làm

c++ - this 和 const 深入

In lại Tác giả: Walker 123 更新时间:2023-11-28 07:17:23 30 4
mua khóa gpt4 Nike

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

Ví dụ:

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

trả lại *cái này;
}

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

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

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

câu trả lời hay nhất

自从我使用 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
}

trả lại *cái này;
}

如果我没记错的话,一个执行多重赋值的例子说明了为什么赋值操作有效。如果您有 x、y、z 并且执行了以下操作, x=y=z

然后 y 被赋值为 z,他们 x 被赋值为 y,因此返回引用(这是赋值运算符需要的输入)。

Hy vọng điều này sẽ giúp.

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

30 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress