Effective C++条款53

不要轻忽编译器的警告

编译器的警告对于有些程序员来说并不在意。他们认为警告并不威胁程序或者对程序来说没有什么太大的副作用。然而,这种想法在编程的时候可能会付出很大的代价。 如下例子:

class B{public:() const;};class D: public B{public:();};

该段代码的程序员想让class D继承class B的f()函数,但是D中却没有声明为const。编译器不会报错,可能会给如下警告,,如下

你或许会想,这正是我们想做的事。但是编译器在试图告诉你B::f并没有在D中重新声明,而是被遮掩了。如果忽略这个警告,比如导致错误行为。此时多态性会受到威胁。 如下代码:

;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的fd1.f();//调用class D的fb = &d1;b->f();;}

从编译器的警告中获得经验,学会了解警告信息和它们看起来的意义并不十分相同。在最高警告级别下没有任何警告的程序是最理想的,但是对警告欧了深刻理解,可以选择忽略某些警告信息。但是一定记住在忽略这个警告之前,一定要了解它的真实意图。

警告信息和编译器相关,不同的编译器有不同的警告标准。例如上面代码中的函数遮掩在另一个编译器编译,可能没有任何警告。

生命中,每一种苦难的背后都有一片晴朗的天空

Effective C++条款53

相关文章:

你感兴趣的文章:

标签云: