gpt4 book ai didi

c++ - C++ 中的运算符重载 = operator

转载 作者:行者123 更新时间:2023-11-30 04:43:35 24 4
gpt4 key购买 nike

以下是重载了 operator = 的 Node 类(仅显示自赋值位)。

Node& operator=(const Node &other) {
if ( this != &other) {
// do stuff
}
}

我的问题是为什么我需要显式输入“&other”,“other”不是已经是对 Node 对象的引用了吗?此外,当我取消引用“this”并进行比较时:

if ( *this!= other ) 

还是会报错。是不是因为 this 是指向 Node 对象的 const 指针,而 'other' 是一个常量节点对象?因为即使是这样的事情也行不通:

Node& operator=(const Node &other) {
if ( (const Node)*this != other) {
// do stuff
}
}

最佳答案

isn't "other" already a reference to a Node object?

是的。引用不是指针。它是对象的直接别名。当您与它交互时,您是在直接与对象交互,而不是与它的地址交互。另一方面,指向对象的指针是地址的容器。当您与指针交互时,您也不会影响它指向的对象,只会影响地址。相反,您取消引用它以获得该对象的别名,这就是您影响指针对象的方式。

因此,由于它们的差异,您通常无法比较指针和引用。因此,要检查对象身份,您需要从引用中获取地址,然后将其与 this 指针进行比较。

Is it because this is a const pointer to a Node object but 'other' is a const Node object?

不,这是因为 *this 获得了对象的别名,而 other 已经是。当您编写 *this != other 时,您正在尝试将 != 应用于对象本身,而不是应用于它们的地址。由于可能没有定义 operator!=,因此您无法进行比较。我也不怀疑你想要。

Because even something like this won't work

(const Node)*this 正在取消引用 this,从而获得一些不是指针(而是对象)的东西,然后尝试将对象转换为指针类型。这不是语言隐式支持的东西。因此错误。

关于c++ - C++ 中的运算符重载 = operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58195828/

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