如果给定函数operator=
,我该如何检查两个内存地址是否相同?我相信以下是正确的,但它使用==
运算符而不是定义的运算符。我如何使用=
运算符执行此操作?
if(&this == &rhs)
return true;
答案 0 :(得分:1)
您没有比较正确的地址。 this
已经是指向对象的指针。看起来你正试图实现共同的模式:
Foo & Foo::operator=( const Foo & rhs )
{
if( this == &rhs )
{
// :::
}
// :::
}
以上,this
的类型为Foo*
,&rhs
为Foo const *
,使其具有可比性。
[编辑:从标准中添加相关部分,取自C ++ 14草案标准]
从第5.3.1节 [expr.unary.op] :
开始
- 一元&的结果operator是指向其操作数的指针。操作数应为左值或 qualified-id 。 ...
醇>
从第9.3.2节 [class.this] :
开始
- 在非静态成员函数的主体中,关键字 this 是一个prvalue表达式,其值是调用该函数的对象的地址。
醇>
由于this
既不是左值也不是 qualified-id ,因此如果您尝试,则无法获取其地址,编译器应报告错误。