首页 > 代码库 > boost addressof--正确获取重载了&的类的对象的地址

boost addressof--正确获取重载了&的类的对象的地址

在c++中,我们想获取一个对象的地址,直接&(取地址符)就可以,但是如果一个了类重载的&运算符,我们怎么获取它的对象的地址呢?

如:

#include <iostream>#include <boost/utility.hpp>using namespace std;class foo{public:    int operator&(){        return 100;    }};int main(){    foo f;    cout<<&f<<endl;    foo* pf = boost::addressof(f);    cout<<pf<<endl;}

可以直接用boost中的addrssof争取获取对象的地址,不管其是否重载了&运算符,

template <class T> struct addressof_impl{    static inline T* f(T& v, long){        return reinterpret_cast<T*>(&const_cast<char&>(reinterpret_cast<const volatile char &>(v)));      }    static inline T* f(T* v, int){        return v;    }};

boost addressof中用了这样一段代码,也可以这样解释,也就是说c++标准保证,如果一个T1类型的对象x,被强制转换成了一个T2类型引用,那么T2引用是引用着T1对象,想当于*reinterpret_cast<T2*>(&x) 。所以说addressof()函数的实现是基于上述规定的。

class object{public:    int operator&(){        return 100;    }};object obj;object* pobj = (object*)&(char&)obj;

 

from:

http://blog.csdn.net/demon__hunter/article/details/5450498

boost addressof--正确获取重载了&的类的对象的地址