&rhs!= this,比较对指针的引用?

ihm*_*ihm 1 c++ g++ operator-overloading pass-by-reference

这是一个赋值运算符.&rhs != this令人困惑.我的问题:rhs是Message类型的引用.什么&rhs意思?做&什么(引用的内存地址?)?另一个问题是return *this.因为我们想要一个类型为Message的引用,但是*这是一个Message类型的对象,对吧?我们如何将对象返回引用?

Message& Message::operator=(const Message &rhs)
{
    if (&rhs != this)
    {
         some functions;
    }
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 10

&rhs 表示引用所引用的对象的地址.

Message a;
const Message &rhs = a;

if (&rhs == &a) std::cout << "true" << std::endl;
Run Code Online (Sandbox Code Playgroud)

这将打印true.

引用不是一个不同的对象; 它只是一个指针的语法糖,它指向同一个引用它的对象.因此,当您编写时return this,它会返回指向该对象的指针,但如果您编写return *this,则会返回该对象的副本或对该对象的引用,具体取决于返回类型.如果返回类型是Message &,那么您告诉编译器" 不要复制而是返回相同的对象 ".现在,同一个对象只不过是一个参考.可以随时进行对象的引用.例如,见上述声明rhs; 它是const Message & rhs = a,因为targer类型被提到作为引用类型,你正在引用rhs该对象a.就这么简单.