More Effective C++之5

原创 2006年05月31日 09:58:00
条款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,这也能避免一些错误,这些错误在这里就不再赘述了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

More Effective C++之Item M5:谨慎定义类型转换函数

C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换为double。因此当你把...

More Effective C++----(4)避免无用的缺省构造函数 & (5)谨慎定义类型转换函数

Item M4:避免无用的缺省构造函数 缺省构造函数(指没有参数的构造函数)在C++语言中是一种让你无中生有的方法。构造函数能初始化对象,而缺省构造函数则可以不利用任何在建立对象时的外部数据就能初始化...

More Effective C++学习笔记(5)-技巧

主题 概要 C++ More Effective C++ 技巧 编辑 时间 新建 20170121 序号 参考资料 1 More ef...

More Effective C++:Item 27

温习More Effective C++,对于Item 27:要求或禁止在堆中产生对象,整理思路于此文。编译期控制通过禁用编译器产生对象所需的选项即可在编译期阻止对象被定义。产生堆对象所需的选项: ...

More Effective C++之Item M21:通过重载避免隐式类型转换

C++规则:每一个重载的operator必须带有一个用户定义类型(user-defined type)的参数; 以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: class UP...

More Effective C++:指针与引用的区别

指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? ...

More Effective C++----技巧 & (25)将构造函数和非成员函数虚拟化

技巧 本书涉及的大多数内容都是编程的指导准则。这些准则虽是重要的,但是程序员不能单靠准则生活。有一个很早以前的卡通片叫做“菲利猫”(Felix the Cat), 菲利猫无论何时遇到困难,它都会拿...

More Effective C++议题【一】:指针和引用

> 学习笔记【一】 这个议题作为第一个建议出现在了 More effective ++中, 在一开始,第一件事就是提醒了我们关于指向空值的引用. 即如下代码出现的可能性: char *pc = 0; ...

More Effective C++----(10)在构造函数中防止资源泄漏

Item M10:在构造函数中防止资源泄漏 如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音...

More Effective C++笔记

(之前Mindjet笔记的截图) 更多:(http://blog.csdn.net/u011512437/article/details/48879543 “Effective C++笔记”)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)