为什么我不能设置 *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"。

当您将 ab 进行比较时,您应该返回 true。但是,当您将 a 分配给 b 或相反时,IMO 您应该继续分配。