如何检查两个地址是否相同?

时间:2016-12-13 22:00:04

标签: c++ operators memory-address

如果给定函数operator=,我该如何检查两个内存地址是否相同?我相信以下是正确的,但它使用==运算符而不是定义的运算符。我如何使用=运算符执行此操作?

if(&this == &rhs)
    return true;

1 个答案:

答案 0 :(得分:1)

您没有比较正确的地址。 this已经是指向对象的指针。看起来你正试图实现共同的模式:

Foo & Foo::operator=( const Foo & rhs )
{
    if( this == &rhs )
    {
        // :::
    }

    // :::
}

以上,this的类型为Foo*&rhsFoo const *,使其具有可比性。

[编辑:从标准中添加相关部分,取自C ++ 14草案标准]

从第5.3.1节 [expr.unary.op]

开始
  
      
  1. 一元&的结果operator是指向其操作数的指针。操作数应为左值或 qualified-id 。 ...
  2.   

从第9.3.2节 [class.this]

开始
  
      
  1. 在非静态成员函数的主体中,关键字 this 是一个prvalue表达式,其值是调用该函数的对象的地址。
  2.   

由于this既不是左值也不是 qualified-id ,因此如果您尝试,则无法获取其地址,编译器应报告错误。