-2
如果給定功能operator=
,如何檢查兩個內存地址是否相同?我相信以下是正確的,但它使用==
運算符而不是定義的運算符。我如何與=
運營商做到這一點?如何檢查兩個地址是否相同?
if(&this == &rhs)
return true;
如果給定功能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?你想達到什麼目的? –