如何检查两个地址是否相同?
问题描述:
如果给定功能operator=
,如何检查两个内存地址是否相同?我相信以下是正确的,但它使用==
运算符而不是定义的运算符。我如何与=
运营商做到这一点?如何检查两个地址是否相同?
if(&this == &rhs)
return true;
答
你是不是比较正确的地址。 this
已经是一个指向你的对象的指针。它似乎您试图实现共同的模式:
Foo & Foo::operator=(const Foo & rhs)
{
if(this == &rhs)
{
// :::
}
// :::
}
以上,this
类型是Foo*
和&rhs
是Foo const *
,使它们具有可比性。
[编辑:添加从标准的相关部分,取自C++ 14标准草案]
从第5.3.1节[expr.unary.op]:
- 一元运算符&的结果是指向其操作数的指针。操作数应为左值或限定符号。 ...
从节9.3.2 [class.this]:
- 在非静态成员函数的主体中,关键字这是一个prvalue表达式,其值是调用该函数的对象的地址。
由于this
既不是左值也不是合格-ID,你不能把它的地址,如果你尝试你的编译器应该报错。
'operator ='是一个_assignment_运算符,而不是比较。 –
'if(&this ==&rhs)'你可能想使用'if(this ==&rhs)',但是太多地缩小了你的问题的上下文。 –
_“我如何用=操作符来做这件事?”_ Huh?你想达到什么目的? –