提问人:Seungmin Lee 提问时间:5/5/2020 最后编辑:Vlad from MoscowSeungmin Lee 更新时间:5/5/2020 访问量:94
为什么我不能设置 *this == 类对象
Why can't I set *this == class object
问:
我正在重载运算符 = 进行复习。 为什么我可以设置“this == &st”而不是“*this == st”?
StringBad & StringBad::operator=(const StringBad & st)
{
if (this == &st) // if the object assigned to itself, return to itself.
return *this; // why compiler give error when I set *this ==st ?
/* blah blah
...
... */
return *this; // return reference to invoking object
}
答:
2赞
cigien
5/5/2020
#1
比较 2 个指针与比较这些指针的值不是一回事。例如:
int *a, *b;
if(a == b)
if (*a == *b) // not the same
当然,如果 2 个指针相同,则它们指向相同的值,但反之则不成立。
在这种情况下,检查 if 将编译(假设定义为 ),但这与检查 if 不是一回事。*this == st
operator==
StringBad
this == &st
2赞
Vlad from Moscow
5/5/2020
#2
两个不同的对象可以彼此相等,但这并不意味着它们是相同的。
以身作则
#include <iostream>
#include <iomanip>
int main()
{
int x = 0;
int y = 0;
std::cout << "x == y is " << std::boolalpha << ( x == y ) << '\n';
std::cout << "&x == &y is " << std::boolalpha << ( &x == &y ) << '\n';
}
程序输出为
x == y is true
&x == &y is false
因此,需要进行此检查以确定此处是否存在自分配。this == &s
0赞
R Sahu
5/5/2020
#3
为什么我可以设置但不能?
this == &st
*this == st
我想你的意思是说,为什么我可以使用但不能?this == &st
*this == st
暂且忽略这一点,答案是,是的,你可以,但这不一定是总是正确的做法。它可能适合您的情况。在这种情况下,您当然应该使用它。当然,这意味着你需要先为你的类实现。operator==
下面是一个示例,您不应该使用该示例来使赋值成为 noop。*this == st
假设您有一个类,它捕获具有值和单位的物理量,假设您有:
对象,表示 1 “m”。
对象,表示 100 “cm”。a
b
当 yoou 比较 时 , 你应该 回来 。但是,当您分配给IMO或反之亦然时,您应该继续分配。a
b
true
a
b
评论
StringBad::operator==
==