Item 53: Pay attention to compiler warnings.
編譯警告在C++中很重要,因為它可能是個錯誤啊! 不要隨便忽略那些警告,因為編譯器的作者比你更清楚那些代碼在干什麼。 所以,
其實在多數項目實踐中,不僅要消除所有編譯警告,消除所有代碼風格檢查警告也是常見慣例。
還是看一個常見的錯誤吧,編譯器會幫你發現它。比如我們想在D
中重寫B
中的虛函數f()
:
class B{
public:
virtual void f() const;
};
class D:public B{
public:
virtual void f();
};
我們忘記寫const
了!這已經不是重寫虛函數了,而是定義同名函數而徹底隱藏父類中的void f() const
。 所以編譯器會給警告;
warning: D::f() hides virtual B::f()
編譯器的意思是B
中沒有聲明過這樣一個f
。但很多無知的程序員會想:當然D::f
隱藏了B::f
,這就是我要的結果啊! 卻沒有想到是自己忘寫了const
。這裡犯的錯誤可能會導致長時間的debug,就因為你忽略了編譯器早就發現的一個問題。
當你有很多經驗時便能識別那些warning到底在說什麼,但最好的習慣還是消除多有warning。因為當warning井噴時很容易忽略其中的嚴重問題。 至少當你忽略一個warning時,要確保你已經完全理解了它在說什麼。