码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:style   blog   http   color   os   io   ar   art   div   

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

标签:style   blog   http   color   os   io   ar   art   div   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!