23

unary をオーバーロードしたクラスがありoperator&ます。そのタイプのオブジェクトは を使用して作成されたnewため、変数のアドレスにアクセスできましたが、静的オブジェクトを使用する必要があります。そのアドレスを取得することは可能ですか?

4

2 に答える 2

36

C++11 以降では、ヘッダーstd::addressof(object)で宣言されています。<memory>

const歴史的には、特に修飾子をvolatile正しく処理したい場合は、よりグロテスクでした。Boostの実装で使用される1つの可能性addressof

reinterpret_cast<T*>(
    &const_cast<char&>(
        reinterpret_cast<const volatile char &>(object)))

最初に変換中に修飾子を追加して、それが機能するchar&ようにしますが、修飾されました。次に、最終的な変換が機能するようにそれらを削除します。最後にアドレスを取得し、それを正しいタイプに変換します。と同じ修飾子を持っている限り( から推定されるテンプレート パラメーターとして)、結果のポインターは正しく修飾されます。reinterpret_castobjectTobjectobject

于 2014-10-30T13:55:45.413 に答える
30

C++11 以降、関数std::addressofを使用できます。

于 2014-10-30T13:49:39.873 に答える