2015-09-20 8 views
75

のアドレスオペレータ&がうまく動作する場合は、なぜC++がaddressof()の機能を導入したのですか? &演算子は最初からC++の一部です。なぜこの新しい関数が導入されたのですか? Cの&オペレータよりも利点がありますか?C++で&(アドレス)演算子を使用する代わりに、std :: addressof()関数テンプレートを使用する利点はありますか?

+0

@ShafikYaghmour:いいえその重複しません。 – Destructor

+1

それは私に重複しているように見えますが、私はそれを自分自身でハンマーにするほど強く感じませんが、それは関係なく関係しています。あなたがなぜそれが違っていると感じたのか説明した方がより説得力があります。 –

+5

オーバーロードされた単項演算子& 'をバイパスする能力について言及することなく、' std :: addressof'を議論するページを見つけるのは難しいでしょう。この質問は研究努力がゼロであることを示しています –

答えて

115

operator&はオブジェクトのアドレス以外に何かを与えるためにクラスタイプのためにオーバーロードされることがありますが、std::addressof()は常にあなたに実際のアドレスを与えます。
Contrived example

#include <memory> 
#include <iostream> 

struct A { 
    A* operator &() {return nullptr;} 
}; 

int main() { 
    A a; 
    std::cout << &a << '\n';    // Prints 0 
    std::cout << std::addressof(a);  // Prints a's actual address 
} 

これを行うとき、あなたは不思議場合に便利です:
What legitimate reasons exist to overload the unary operator&?

関連する問題