随感而发

杂七杂八

统计

留言簿(13)

阅读排行榜

评论排行榜

诡异的强制类型转换操作符

最近在学习中,看到了一段很诡异的代码。

CComptr<IDispatch> ptrDisp;
IDispatch
* pDisp = ptrDisp;

对此很是疑惑,为什么两个完全不同的类型可以无差别的转换。
猜测1:
认为IDispatch重载了赋值操作符。0.1秒的时间否定。他只是一个接口,定义很明确的4的方法。不可能。由于不相信,还特意去看了一下他的接口定义。彻底死心。
猜测2.
CComptr<IDispatch>重载了赋值操作符。但是想来想去应该和他的重载没有关系,因为这个操作在他的左边,和他的赋值操作符全然没有关系。不信之,进去看了一下,并且把重载给注释掉,结果还是能编译成功,彻底确信不是赋值的作用。

真相:
终于拿出杀手锏,F11,单步,哈哈,进去发现原来有:

    operator T*() const throw()
    
{
        
return p;
    }

这段代码。哈哈。。问了大牛知道是重载强制转换。哈哈。纵欲知道原因了。。。
自己也模仿写了一下:

class A1 
{
public:
    
int operator*()
    
{
        
return 6;
    }

    
operator int() //const
    {
        
return 6;
    }

}
;
int main()
{
    
int a(5);
    
int a1 = int(6);
    A1 aa1;
    
int a2 = aa1;  
    
return 0;
}

编译成功,爽。。。。

posted on 2009-07-28 20:03 shongbee2 阅读(1068) 评论(2)  编辑 收藏 引用 所属分类: c/c++

评论

# re: 诡异的强制类型转换操作符 2009-07-29 00:08 Sunshine Alike

的确诡异,原来类型转换的重载有点特殊,学习了!!  回复  更多评论   

# re: 诡异的强制类型转换操作符 2009-08-05 16:30 shongbee2

@Sunshine Alike
哈哈,我也是刚知道的。。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理