boost::addressof

トップページ > 小道具 >

abstract

必要なヘッダ
<boost/utility.hpp>
出来ること
変数のアドレスを取得
リファレンス
en

sample

サンプルの動作確認バージョン [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;
}

etc

普通は変数のアドレスを取りたければ & 演算子を頭に付ければOKです。 が、C++では&演算子をオーバーロードして意味を変えてしまう、 ということが(良いか悪いかは別として)可能です。そのため & を使っても、 ちゃんとそのオブジェクトを指すポインタが得られるかどうかは型次第。

そこでどうしてもアドレスが欲しいときは、 色々無理矢理キャストをしまくって欲しい値を取り出すことになります。 その美しくない作業をまとめたのがこの addressof 関数です。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0