-2
関数operator=
が指定されている場合、2つのメモリアドレスが同じかどうかをどのように確認できますか?私は以下が正しいと信じていますが、定義されたオペレータではなく==
オペレータを使用しています。 =
オペレータでこれをどうすればできますか?2つのアドレスが同じかどうかを確認するにはどうすればいいですか?
if(&this == &rhs)
return true;
関数operator=
が指定されている場合、2つのメモリアドレスが同じかどうかをどのように確認できますか?私は以下が正しいと信じていますが、定義されたオペレータではなく==
オペレータを使用しています。 =
オペレータでこれをどうすればできますか?2つのアドレスが同じかどうかを確認するにはどうすればいいですか?
if(&this == &rhs)
return true;
あなたは正しいアドレスを比較していません。 this
は既にオブジェクトへのポインタです。
Foo & Foo::operator=(const Foo & rhs)
{
if(this == &rhs)
{
// :::
}
// :::
}
以上、this
のタイプはFoo*
で、&rhs
は彼らが同等で作り、Foo const *
次のとおりです。そして、それはあなたが一般的なパターンを実装しようとしている表示されます。
: [expr.unary.op]セクション5.3.1 から
[編集C++ 14ドラフト標準から採取し、標準からの関連する部分を追加]:
を
- 単項演算子&の結果は、そのオペランドへのポインタです。オペランドは左辺値または修飾IDです。 ...セクション9.3.2 [class.this]から
:非静的メンバ関数の本体で
- 、キーワードこのでありますprvalue式は、関数が呼び出されるオブジェクトのアドレスです。
this
は左辺値も資格-IDでもないので、あなたはそのアドレスを取ることができない、あなたがしようとした場合、あなたのコンパイラがエラーを報告する必要があります。
'operator ='は_assignment_演算子であり、比較ではありません。 –
'if(&this ==&rhs)'おそらく 'if(this ==&rhs)'を使いたいのですが、あなたの質問の文脈をあまりにも狭めてしまいました。 –
_ "=演算子でどうすればいいですか?"あなたは何を達成しようとしていますか? –