iT邦幫忙

2025 iThome 鐵人賽

DAY 26
2

到了最後一個章節 —— Miscellany,再過幾天準備完結撒花!本日工作繁忙想稍微偷懶,就只簡單介紹知識點 53。剩下的内容剛好都和 library 有關,就等明天一同說明。

53. Pay attention to compiler warnings

許多工程師會心存僥幸忽略編譯器的 warning,安慰自己只要沒有 error 就不是嚴重的問題。然而 C++ 編譯器的警告往往指出潛在的缺失,不修正這些警告可能導致程式出現錯誤行為。

例如以下程式的期望行為是 Yoyo 重新定義 Student 的虛擬函式:

class Student {
public:
    virtual void score() const;
};

class Yoyo : public Student {
public:
    virtual void score();
};

上述程式碼有一個小錯誤:在 Studentscore 被宣告為常數成員函式,而在 Yoyo 中卻並未被宣告為 const。這導致 Student 中的函式未正確重新定義,反而完全被隱藏。編譯器可能會給出類似警告,但因字面意義不直覺而遭到輕視:

warning: Yoyo::score() hides virtual Student::score()

隨著對某個編譯器的熟悉,會逐漸理解各種警告訊息以及其背後的意圖。不同編譯器可能對同一問題的處理方式不同,因此不應該只依賴警告來檢測程式碼的品質。最好的實踐方式是確保程式碼在最高警告等級下編譯依然毫無警告。即使選擇忽略某些特定的警告,也應在完全理解該警告的意圖後再這麼做。


上一篇
[Day 25] 中場休息 Q&A小測驗!!
下一篇
[Day 27] Miscellany II
系列文
30 天 Effective C++ 大挑戰!!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言