2016-12-13 30 views
-2

関数operator=が指定されている場合、2つのメモリアドレスが同じかどうかをどのように確認できますか?私は以下が正しいと信じていますが、定義されたオペレータではなく==オペレータを使用しています。 =オペレータでこれをどうすればできますか?2つのアドレスが同じかどうかを確認するにはどうすればいいですか?

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

'operator ='は_assignment_演算子であり、比較ではありません。 –

+0

'if(&this ==&rhs)'おそらく 'if(this ==&rhs)'を使いたいのですが、あなたの質問の文脈をあまりにも狭めてしまいました。 –

+0

_ "=演算子でどうすればいいですか?"あなたは何を達成しようとしていますか? –

答えて

1

あなたは正しいアドレスを比較していません。 thisは既にオブジェクトへのポインタです。

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

    // ::: 
} 

以上、thisのタイプはFoo*で、&rhsは彼らが同等で作り、Foo const *次のとおりです。そして、それはあなたが一般的なパターンを実装しようとしている表示されます。


: [expr.unary.op]セクション5.3.1 から

[編集C++ 14ドラフト標準から採取し、標準からの関連する部分を追加]:

  1. 単項演算子&の結果は、そのオペランドへのポインタです。オペランドは左辺値または修飾IDです。 ...セクション9.3.2 [class.this]から

:非静的メンバ関数の本体で

  1. 、キーワードこのでありますprvalue式は、関数が呼び出されるオブジェクトのアドレスです。

thisは左辺値も資格-IDでもないので、あなたはそのアドレスを取ることができない、あなたがしようとした場合、あなたのコンパイラがエラーを報告する必要があります。

関連する問題