2011-06-27 14 views
13

可能性の重複:「&(アドレスの)演算子を過負荷にしたいのはなぜですか?

なぜ誰もが、おそらく(&をオーバーロードしたい:
What legitimate reasons exist to overload the unary operator& ?

私はちょうどthis questionを読んで、私は助けることはできませんが、不思議アドレスの ")演算子?

 
    some_class* operator&() const { return address_of_object; } 

正当なユースケースはありますか?

+0

@Matti:マージにフラグを立てることができます。それは、回答だけでなく質問も複製するよりも優れています。 –

+0

@Tomalak:Whoa。私はそれが可能であるかどうかはわかりませんでした。 –

+0

@マッティ:私はそれが100%ではないと確信しているわけではありませんが、噂を聞いたことがあります。:) –

答えて

18

どんな種類のラッパーオブジェクトを扱っている場合でも、ラッパーへのアクセスを含まれているオブジェクトに透過的に転送する必要があるか、必要があります。その場合は、ラッパーへのポインターを返すことはできませんが、含まれているオブジェクトへのポインターを返すようにアドレス演算子をオーバーロードする必要があります。

+0

Heh、私はこれを行うことができるかどうかを知るために "C++ overload address of"を探しました。非常に素早く安心してくれてありがとう:-) –

6

彼らは邪悪で、あなたが苦しんでほしいからです。

また、プロキシオブジェクトを使用している場合はどうでしょうか?私はと仮定します。あなたはコンテナではなく管理対象オブジェクトへのポインタを返すことをお勧めしますが、私はむしろgetter関数を使ってポインタを返します。そうでなければ、boost::addressofのようなものを使うことを忘れないでください。

+0

プロキシオブジェクトのポイントは、あなたがそれを知っていないことです。 (あるいは、あなたが知らなかったかのように行動します)特に、そのアドレスについてはわかりません。とにかく一時的です。 – curiousguy

7

はい、デバッグ用(あなたが任意のアクセスまたは参照をトレースしたい場合は、&*または->への呼び出しにログ行を置きたいかもしれません)。

0

私はすでにこれを生産的なコードで見てきました。

しかし、0だけでなく、structの内容のバイナリ表現が返されました。

ユースケースは単純です:バイナリ操作。

+2

単項 '&'を使ったバイナリ演算? –

+0

私は再びコードを見つけたら、私は例を投稿します。奇妙に思える、面白い(私は醜いと思うかもしれませんが、おそらく作者は '&'を2度使用する方がいいと思っていました); –

+0

なぜ、それが意味をなさないのですか? :/ –

関連する問題