为什么我不能设置 *this == class 对象
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 个指针 与比较这些指针的值 不同。例如
int *a, *b;
if(a == b)
if (*a == *b) // not the same
当然,如果2个指针相同,则指向相同的值,反之则不然。
在这种情况下,检查 *this == st
是否会编译(假设为 StringBad
定义了 operator==
),但这与检查 this == &st
是否相同是两码事。
两个不同的对象可以彼此相等,但这并不意味着它们是相同的。
举个例子
#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
判断这里是否存在自赋值
Why i can set this == &st
but not *this == st
?
我想你的意思是,为什么我可以使用 this == &st
但不能使用 *this == st
?
暂时忽略这一点,答案是,是的,你可以,但这不一定总是正确的做法。它可能适合您的情况。在这种情况下,您当然应该使用它。当然,这意味着您需要先为您的 class 实施 operator==
。
这里有一个例子,你不应该使用 *this == st
来使赋值成为 noop。
假设您有一个 class 捕获具有值和单位的物理量,假设您有:
对象 a
,表示 1 "m".
对象 b
,表示 100 "cm"。
当您将 a
与 b
进行比较时,您应该返回 true
。但是,当您将 a
分配给 b
或相反时,IMO 您应该继续分配。
我正在复习重载运算符=。 为什么我可以设置 '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 个指针 与比较这些指针的值 不同。例如
int *a, *b;
if(a == b)
if (*a == *b) // not the same
当然,如果2个指针相同,则指向相同的值,反之则不然。
在这种情况下,检查 *this == st
是否会编译(假设为 StringBad
定义了 operator==
),但这与检查 this == &st
是否相同是两码事。
两个不同的对象可以彼此相等,但这并不意味着它们是相同的。
举个例子
#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
判断这里是否存在自赋值
Why i can set
this == &st
but not*this == st
?
我想你的意思是,为什么我可以使用 this == &st
但不能使用 *this == st
?
暂时忽略这一点,答案是,是的,你可以,但这不一定总是正确的做法。它可能适合您的情况。在这种情况下,您当然应该使用它。当然,这意味着您需要先为您的 class 实施 operator==
。
这里有一个例子,你不应该使用 *this == st
来使赋值成为 noop。
假设您有一个 class 捕获具有值和单位的物理量,假设您有:
对象 a
,表示 1 "m".
对象 b
,表示 100 "cm"。
当您将 a
与 b
进行比较时,您应该返回 true
。但是,当您将 a
分配给 b
或相反时,IMO 您应该继续分配。