1998:C++98 標準化——ISO 正式規範#
事件#
1998 年,ISO C++ 標準(ISO/IEC 14882:1998,俗稱 C++98) 正式發佈。這是 C++ 第一個國際標準,也是語言「成年」的標誌。
關鍵內容#
- 語言核心:類別、virtual、樣板、例外、命名空間、RTTI、
bool/wchar_t型別、explicit關鍵字、成員樣板。 - 標準庫:STL(容器/迭代器/演算法)、iostream、string、locale。
namespace std:所有標準庫都放進std命名空間。
為何重要#
- 標準承諾:與 2015 年 Rust 1.0 的意義相同——企業才敢投入生產,編譯器廠商(GCC、Microsoft、Borland)有了統一的目標。
- C++98 統治了 13 年(直到 2011 C++11),期間被戲稱為「C++03 只是修錯字」的漫長等待。
- 標準化確立了 ISO 委員會(WG21)的運作模式:提案、審查、投票——後來 C++11/14/17/20/23 都循此模式。
理論與實用原因#
- 理論原因:程式語言標準化理論——語言要有規範才能有正確的實作與可攜性。
- 實用原因:1990 年代末 C++ 已是最主流的系統語言,但各編譯器方言叢生(Cfront、Sun CC、MSVC 各自為政),跨平台開發痛苦不堪。
彌補了什麼缺陷#
彌補了「方言叢生、無可攜保證、文件即規範(Stroustrup 的書)而非國際標準」的缺陷。
程式範例#
C++98 的典型可攜程式——所有標準庫都在 std:: 命名空間,同一份程式碼在 GCC、MSVC、Borland 上都能編譯:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main() {
// std::vector:STL 的動態陣列容器
std::vector<std::string> names;
// std::string:標準字串類別
names.push_back("Ada");
names.push_back("Grace");
names.push_back("Linus");
// std::sort:STL 演算法(搭配迭代器使用)
std::sort(names.begin(), names.end());
// 用迭代器走訪容器
for (std::vector<std::string>::iterator it = names.begin();
it != names.end(); ++it) {
std::cout << *it << "\n";
}
return 0;
}
只要嚴格使用 std:: 前綴與標準庫介面,這份程式碼就能在各家編譯器間原封不動地移植——這正是 C++98 標準化的核心承諾。