1. ホーム
  2. c++

[解決済み] C++でoperator&を使う代わりにstd::addressof()関数テンプレートを使う利点はありますか?重複

2023-04-24 01:05:30

質問

もし アドレス operator& がうまく機能するのであれば、なぜC++は addressof() 関数を導入したのでしょうか?それは & 演算子は最初からC++の一部です。ではなぜこの新しい関数が導入されたのでしょうか?Cの & 演算子に対して何か利点があるのでしょうか?

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

単項演算子 operator& はオブジェクトのアドレス以外のものを与えるためにクラス型ではオーバーロードされるかもしれません。 std::addressof() は常にその実際のアドレスを与えます。

工夫された例 :

#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
}

これをやるとどんな時に便利なのかというと

単項演算子&をオーバーロードする正当な理由は何でしょうか?