More Effective C++之5

条款5:对定制的[型别转换函数]保持警觉
class Sample
{
public:
       Sample(int i){m_i = i;}
       operator int(){return 10;}
protected:
private:
       int m_i;
};
 
int main(int argc, char* argv[])
{
       Sample test(5);
       if (10 == test)
       {
              printf("Wonderful!/n");
       }

       printf("Hello World!/n");

       return 0;
}

       我写的一段Example,很令人惊异的是10居然等于Sample的对象,不可思议。事实上是static_cast<int>(test),that means test.int(),然后返回10。这真是恐怖。所以遇到这样的问题,不要写operator int(),而应该写int asInt()。先前有经验的程序员在构造STL的时候就是这么做的。那么在构造函数之前还希望能够加上explicit,这也能避免一些错误,这些错误在这里就不再赘述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值