23

重複の可能性:
単項演算子& をオーバーロードする正当な理由は何ですか?

私はこの質問を読んだばかりで、疑問に思わずにはいられません:

&("address-of") 演算子をオーバーロードしたいと思う人がいるでしょうか?

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

正当な使用例はありますか?

4

4 に答える 4

32

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

于 2011-06-27T22:11:21.733 に答える
8

彼らは悪であり、あなたを苦しめたいからです。

または、プロキシ オブジェクトを使用している場合はどうでしょうか。コンテナーではなく、管理対象オブジェクトへのポインターを返したいと思うかもしれませんが、ゲッター関数を使用してそれを行いたいと思います。それ以外の場合は、次のようなものを使用することを覚えておく必要がありますboost::addressof

于 2011-06-27T22:09:56.547 に答える
8

はい、デバッグ用です (アクセスまたは参照をトレースする場合は、&*またはへの呼び出しにログ行を追加することをお勧めします->)。

于 2011-06-27T22:10:13.080 に答える
0

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

しかし、そこでは、 だけでなく、 a のコンテンツのバイナリ表現structが返されました0

ユースケースは単純で、二項演算です。

于 2011-06-27T22:13:26.357 に答える