在 Java、C#、Go、Rust 大行其道的今天,幾乎每個 C++ 初學者都會靈魂三問:「現在學 C++ 還有用嗎?花這麼多時間值得嗎?未來有錢途嗎?」 這就像高考填志願般令人迷茫。Herb Sutter(C++ 標準委員會主席、ISO C++ 標準主要設計師)在 C++ and Beyond 2011 的公開演講中,給出了經得起時間檢驗的回答。本文整理自劉未鵬(pongba)筆記與 waterwalk 翻譯,核心觀點在今天依然極具指導意義。
大家常說「用 C++ 是為了效率」。但若效率是唯一理由,為何不直接用 C? C 被公認比 C++ 更輕量、更接近硬體,甚至連 Linus Torvalds 都曾公開表示「C++ 太難用對了,寧願用 C」。這引發了持續數十年的「C vs C++」聖戰,實則掩蓋了真正的決策依據——業務邏輯的表達需求。
即使您的程式碼完全不寫 class、template,您依然有理由選 C++ — 因為您可以直接使用 STL 容器、演算法、智慧指標、std::string、正則表達式、std::transform/for_each 等強大庫組件。正如 Matthew Wilson 在《Extended STL》序言所示:
// C 版:手動管理目錄遍歷與記憶體
DIR* dir = opendir(".");
if (dir) {
struct dirent* de;
while ((de = readdir(dir))) {
struct stat st;
if (0 == stat(de->d_name, &st) && S_IFREG == (st.st_mode & S_IFMT))
remove(de->d_name);
}
closedir(dir);
}
// C++ 版:一行表達意圖,零手動資源管理
std::for_each(readdir_sequence(".", readdir_sequence::files), ::remove);
KISS 原則(Keep It Simple, Stupid)不等於「用原始寫法」,而是「用最適合的工具最直接地表達意圖」。高階庫恰恰能讓簡單的事保持簡單。
C++ 確實複雜,但阻礙我們的不是編程範式(OOP、GP、函數式才 3 種),而是歷史包袱帶來的「非本質複雜性」:語法陷阱、未定義行為、冗長的模板錯誤訊息、缺乏模組系統等。現代 C++ 標準正系統性消除這些痛點:
「人們需要相對複雜的語言去解決絕對複雜的問題。我們不能通過減少語言特性而使其更強大。」—— Bjarne Stroustrup
C++ 難學、難用對,但它是唯一能在「零開銷抽象」與「硬體級控制」之間自由切換的主流語言。只要軟體複雜度持續增長、硬體效能仍有壓榨空間、基礎設施(OS、資料庫、引擎、編譯器)仍需迭代,C++ 就不會過時。現在學習現代 C++,投資回報率極高 —— 這不是信仰,是工程現實。