以前は の存在に気づいていなかったstd::addressof
ので、それが存在する理由は私には理にかなっています。オーバーロードされた の存在下でアドレスを取得する方法としてoperator&
。ただし、実装はやや不透明です。からgcc 4.7.1
:
template<typename _Tp>
inline _Tp*
__addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
{
return reinterpret_cast<_Tp*>
(&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
}
はreinterpret_cast<_Tp*>
明らかです。あとは黒魔術。誰かがこれが実際にどのように機能するかを分析できますか?