[解決済み] xの代わりにaddressof(x)を使用するのはどのような場合ですか?
質問
を必要とするかどうかは、どのように判断すればよいのでしょうか?
addressof(x)
の代わりに
&x
に変更することはできますか?
質問が混乱していたようなので、明確化する必要があるようです。
addressof
は明らかにオーバーロードされた address-of 演算子をバイパスしています。
それはもうわかっている。
私が知りたいのは
というのが本当にやりたいことなのかどうか、どうすればわかるのでしょうか?(特にテンプレートの中などで)
が必要なときを知るのに役立つ、ある種の "ルール" がありますか?
addressof
の代わりに
&
?
結局のところ、どちらもオブジェクトの"アドレスを返しますが、いつどちらを使えばいいのでしょうか?
どのように解決するのですか?
あなたは
std::addressof
を使う必要があるときです。悲しいかな、quot;when you have to"には、テンプレート・コードで作業しているときに型が不明な変数を
T
または
T&
を、その変数のメモリへの正真正銘のポインタに変換します。
C++ 委員会は愚かにも参照演算子のオーバーロードを許可したため (正当な目的はほとんどありません)、ユーザーは実際のポインターを取得するために参照演算子を使用できない何らかの型でテンプレートをインスタンス化することができます。
std::addressof
は、言語がもともと動作を保証しているはずのことを行うために、この怪しげな C++ 機能を使用するユーザーを回避するための方法です。
要するに、これは言語の愚かさに対するライブラリの修正なのです。テンプレートコードでそれを使って
&
の代わりにテンプレートコードで使ってください。もし、あなたのユーザがこのような不謹慎な機能を使わないことが信頼できるのであれば
&
.
関連
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] なぜ (int)x ではなく static_cast<int>(x) を使うのですか?
-
[解決済み] フォワード宣言はどのような場合に使用できますか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] C++でoperator&を使う代わりにstd::addressof()関数テンプレートを使う利点はありますか?重複