第9章 杂项讨论
Miscellany本章只有3个条款.第一个条款强调不可轻易忽视编译器警告信息.第二个条款综览C++标准程序库,其中覆盖由TR1引进的重大新机能.最后一个条款综览Boost,这是一个很重要的C++泛用型网站.
条款53: 不要轻易忽视编译器的警告
Pay attention to compiler warnings.许多程序员习惯性忽略编译器警告,认为如果问题严重,编译器应该给一个错误信息而非警告信息.这种想法对其他语言或许相对无害,但在C++,可能情况不同.举个例子,下面是一个经常发生的错误:
class B {
public:
virtual void f() const;
};
class D : public B {
public:
virtual void f();
};
这里希望以D::f重新定义 virtual 函数B::f,但其中有个错误:B中的f是个 const 成员函数,而在D中它未被声明为 const .编译器可能会提示:
warning: D::f() hides virtual B::f()
经验不足的程序员对这个信息的反应是:"D::f遮掩了B::f".错,这个
编译器试图告诉声明于B中的f并未在D中被重新声明,而是被整个遮掩了(
条款33描述为什么会这样).如果忽略这个编译器警告,几乎肯定会导致错误的程序行为.
一旦从某个特定编译器的警告信息中获取经验,将学会了解不同的信息意味什么,那往往和它们"看起来"的意义十分不同.对警告信息深刻理解后,就可以选择忽略某些警告信息.
注意:
严肃对待编译器发出的警告信息.努力在编译器的最高警告级别下争取"无任何警告"的荣誉.
不要过度依赖编译器的报警能力,因为不同的编译器对待事物的态度并不相同.一旦移植到另一个编译器上,原本依赖的警告信息有可能消失.