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

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

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

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;
}

编译成功,爽。。。。

你可能感兴趣的:(诡异的强制类型转换操作符)