c++ - &rhs != this,将引用与指针进行比较?

标签 c++ g++ operator-overloading pass-by-reference

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

Message& Message::operator=(const Message &rhs)
{
    if (&rhs != this)
    {
         some functions;
    }
    return *this;
}

最佳答案

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

Message a;
const Message &rhs = a;

if (&rhs == &a) std::cout << "true" << std::endl;

这将打印 true

引用不是不同的对象;它只是指针的语法糖,它指向引用它的同一个对象。所以当你写 return this 时,它返回一个指向对象的指针,但是如果你写 return *this,它返回一个 copy对象,或对象的引用,具体取决于返回类型。如果返回类型是 Message &,那么您就告诉编译器“不要复制,而是返回相同对象”。现在 same 对象只不过是一个引用。对象的引用可以随时进行。例如,见上面rhs的声明;它是 const Message & rhs = a,因为目标类型被称为引用类型,所以您正在引用对象 arhs >。就这么简单。

关于c++ - &rhs != this,将引用与指针进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191628/

相关文章:

c++ - 具有未在堆上分配的对象的 AutoPointer

java - 追加现有数组

c++ - g++ 找不到已安装的库

包括来自其他目录的 C++ 不起作用

c++ - dylib 中的重载运算符删除替换了 OSX 中的系统运算符

c++ - 派生类的重载解析失败

c++ - 是否可以将 Doxygen 配置为从协作图中省略基本的 C++ 类型?

c++ - 在 Objective-C 中,如何将方法转发给特定的父类(super class)

c++ - 检测/避免 g++ 符号冲突

python - Python中不同类型操作数的重载运算符