#define、#include、條件編譯。class, virtual, template 等)。{ } [ ] ( ) , ; : :: ...空格、製表、換行、分頁、垂直製表同屬空白字元,作為符號分隔符。編譯器詞法分析階段忽略空白(字串/字元常量內除外)。註解同等於空白字元處理。
「我們的系統已極度複雜,因噎廢食不用 C++ 無異於拒絕更安全的型別檢查、更好的抽象機制、更優秀的庫。」
例外:專案極小、無抽象需求、不需基礎庫(智慧指標、容器、RAII、異常)時,C 可接受。
-Werror、Sanitizer。| 舊式寫法 | 現代替代 (C++11/14/17/20) |
|---|---|
| 原始指標 + new/delete | std::unique_ptr, std::shared_ptr, std::make_unique |
| C 風格陣列 | std::array, std::vector, std::span |
| 宏常量 | constexpr, inline constexpr |
| 手寫鎖 | std::lock_guard, std::scoped_lock |
| 傳值/傳指標 | 優先 const T&, T&&, std::span |
| 虛函數多態 | 必要時用,否則考慮 std::variant + 訪問者 |
認定「C++ 不好」者,即便語言簡化也會找新理由拒絕。真正理性反對者僅一理由:專案中複雜性成本超過抽象收益。對此,採用「最小必要特性集」+「工具自動化治理」即可化解。