跳轉到

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 標準化的核心承諾。

相關條目#