1. ホーム
  2. c++

[解決済み] xの代わりにaddressof(x)を使用するのはどのような場合ですか?

2023-07-19 05:47:02

質問

を必要とするかどうかは、どのように判断すればよいのでしょうか? addressof(x) の代わりに &x に変更することはできますか?


質問が混乱していたようなので、明確化する必要があるようです。

addressof は明らかにオーバーロードされた address-of 演算子をバイパスしています。 それはもうわかっている。

私が知りたいのは


というのが本当にやりたいことなのかどうか、どうすればわかるのでしょうか?(特にテンプレートの中などで)

が必要なときを知るのに役立つ、ある種の "ルール" がありますか? addressof の代わりに & ?

結局のところ、どちらもオブジェクトの"アドレスを返しますが、いつどちらを使えばいいのでしょうか?

どのように解決するのですか?

あなたは std::addressof を使う必要があるときです。悲しいかな、quot;when you have to"には、テンプレート・コードで作業しているときに型が不明な変数を T または T& を、その変数のメモリへの正真正銘のポインタに変換します。

C++ 委員会は愚かにも参照演算子のオーバーロードを許可したため (正当な目的はほとんどありません)、ユーザーは実際のポインターを取得するために参照演算子を使用できない何らかの型でテンプレートをインスタンス化することができます。 std::addressof は、言語がもともと動作を保証しているはずのことを行うために、この怪しげな C++ 機能を使用するユーザーを回避するための方法です。

要するに、これは言語の愚かさに対するライブラリの修正なのです。テンプレートコードでそれを使って & の代わりにテンプレートコードで使ってください。もし、あなたのユーザがこのような不謹慎な機能を使わないことが信頼できるのであれば & .