关闭

More Effective C++之5

583人阅读 评论(0) 收藏 举报
条款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,这也能避免一些错误,这些错误在这里就不再赘述了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:612127次
    • 积分:9784
    • 等级:
    • 排名:第1778名
    • 原创:340篇
    • 转载:141篇
    • 译文:0篇
    • 评论:69条
    最新评论