サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <iostream>
#include <boost/utility.hpp>
using namespace std;
struct OpAmpOverloaded
{
void operator&() {}
};
int main()
{
OpAmpOverloaded obj;
cout << "Address of obj is " <<
reinterpret_cast<int>(boost::addressof(obj)) << endl;
//cout << "Address of obj is " <<
// reinterpret_cast<int>(&obj) << endl;
return 0;
}
普通は変数のアドレスを取りたければ & 演算子を頭に付ければOKです。 が、C++では&演算子をオーバーロードして意味を変えてしまう、 ということが(良いか悪いかは別として)可能です。そのため & を使っても、 ちゃんとそのオブジェクトを指すポインタが得られるかどうかは型次第。
そこでどうしてもアドレスが欲しいときは、
色々無理矢理キャストをしまくって欲しい値を取り出すことになります。
その美しくない作業をまとめたのがこの addressof
関数です。