Effective C++条款53
来源:互联网 发布:下载先锋网络电视 编辑:程序博客网 时间:2024/05/04 10:10
不要轻忽编译器的警告
编译器的警告对于有些程序员来说并不在意。他们认为警告并不威胁程序或者对程序来说没有什么太大的副作用。然而,这种想法在编程的时候可能会付出很大的代价。
如下例子:
class B{ public: virtual void f() const; }; class D: public B{ public: virtual void f(); };
该段代码的程序员想让class D继承class B的f()函数,但是D中却没有声明为const。编译器不会报错,可能会给如下警告,如下
warning: D::f() hides virtual B::f()
你或许会想,这正是我们想做的事。但是编译器在试图告诉你B::f并没有在D中重新声明,而是被遮掩了。如果忽略这个警告,比如导致错误行为。此时多态性会受到威胁。
如下代码:
#include<iostream>using namespace std;class B{public: virtual void f() const{ cout << "class B" << endl; };};class D : public B{public: virtual void f(){ cout << "class D" << endl; };};int main(){ B *b; B b1; D d1; b = &b1; b->f();//调用class B的f d1.f();//调用class D的f b = &d1; b->f();//调用class B的f return 0;}
从编译器的警告中获得经验,学会了解警告信息和它们看起来的意义并不十分相同。在最高警告级别下没有任何警告的程序是最理想的,但是对警告欧了深刻理解,可以选择忽略某些警告信息。但是一定记住在忽略这个警告之前,一定要了解它的真实意图。
警告信息和编译器相关,不同的编译器有不同的警告标准。例如上面代码中的函数遮掩在另一个编译器编译,可能没有任何警告。
1 0
- Effective C++:条款01
- Effective C++:条款02
- Effective C++:条款03
- Effective C++:条款04
- Effective C++:条款05
- Effective C++:条款06
- Effective C++:条款07
- Effective C++:条款08
- 《effective C++》条款三
- 《effective C++》条款5
- 《effective C++》条款六
- Effective C++--经验条款
- Effective C ++ 条款34
- 《Effective C++》条款05
- 《Effective C++》条款06
- 《Effective C++》条款08
- 《Effective C++》资源管理:条款13-条款15
- 《Effective C++》资源管理:条款16-条款17
- 疯狂Java学习笔记(89)-----------Java习惯用法总结
- Matlab数值计算差商与插值
- 测试域名如何使用免备案使用国内主机之几点方法建议
- 面向对象的骗局
- [转]JSP编程,url中加斜杠和不加斜杠的区别
- Effective C++条款53
- java中Base64转码与解码(加密与解密)原理与使用
- Android应用程序UI硬件加速渲染环境初始化过程分析
- linux0.12之main.c的工作流程分析
- C#ref,out变量巧用篇
- Android高级控件----AdapterView与Adapter
- openGL 坐标系的互相转换
- c# xml和类互转,支持泛型
- 深入分析java线程中的volatile