首页 > 代码库 > 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--正确获取重载了&的类的对象的地址
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。