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

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

问题描述:

如果给定功能operator=,如何检查两个内存地址是否相同?我相信以下是正确的,但它使用==运算符而不是定义的运算符。我如何与=运营商做到这一点?如何检查两个地址是否相同?

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

'operator ='是一个_assignment_运算符,而不是比较。 –

+0

'if(&this ==&rhs)'你可能想使用'if(this ==&rhs)',但是太多地缩小了你的问题的上下文。 –

+0

_“我如何用=操作符来做这件事?”_ Huh?你想达到什么目的? –

你是不是比较正确的地址。 this已经是一个指向你的对象的指针。它似乎您试图实现共同的模式:

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

    // ::: 
} 

以上,this类型是Foo*&rhsFoo const *,使它们具有可比性。


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

从第5.3.1节[expr.unary.op]

  1. 一元运算符&的结果是指向其操作数的指针。操作数应为左值或限定符号。 ...

从节9.3.2 [class.this]

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

由于this既不是左值也不是合格-ID,你不能把它的地址,如果你尝试你的编译器应该报错。