首页 > 其他 > 详细

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

时间:2014-09-04 16:35:39      阅读:302      评论:0      收藏:0      [点我收藏+]

在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--正确获取重载了&的类的对象的地址

原文:http://www.cnblogs.com/venid/p/3956154.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!