2016-12-13 63 views
-2

如果給定功能operator=,如何檢查兩個內存地址是否相同?我相信以下是正確的,但它使用==運算符而不是定義的運算符。我如何與=運營商做到這一點?如何檢查兩個地址是否相同?

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

'operator ='是一個_assignment_運算符,而不是比較。 –

+0

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

+0

_「我如何用=操作符來做這件事?」_ Huh?你想達到什麼目的? –

回答

1

你是不是比較正確的地址。 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,你不能把它的地址,如果你嘗試你的編譯器應該報錯。