首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 標頭檔:iostream vs iostream.h 的差異與標準演進

     編輯:程式設計綜合問答

現象

初學者寫 `#include ` 編譯報錯,改成 `#include ` 即通過。為什麼標準庫還要 `.h` 卻不能用?

歷史脈絡

階段

標頭檔命名空間編譯器支援
C++98 前 (舊標準) ``、``... 全域命名空間 舊編譯器 (VC6, Turbo C++)
C++98 標準化 ``、``... (無 `.h`) `std` 命名空間 所有現代編譯器 (GCC, Clang, MSVC, Intel)
C++11/14/17/20 同上,持續擴充 `std` 標準要求

關鍵差異

  1. 命名空間:舊版汙染全域命名空間;新版所有符號在 `std::` 下 (如 `std::cout`、`std::cin`、`std::endl`)。
  2. 標準合規:`` **不在 C++ 標準內**,屬於編譯器擴充。現代編譯器 (VS2010+, GCC 3+) **不再提供** 或標記為棄用。
  3. 功能差異:新版支援區域設定、寬字元、樣板化運算子等現代特性;舊版無。
  4. 正確寫法

    
    #include   // 標準 C++
    
    int main() {
        std::cout << "Hello, Standard C++!" << std::endl;
        // 或 using namespace std; (僅限 .cpp 檔,避免汙染)
        return 0;
    }
    

    常見誤區

    • 以為 `.h` 才是「標頭檔」標準寫法 → **錯**。C++ 標準庫標頭檔**不帶 `.h`**。
    • C 標頭檔在 C++ 中用 ``、`` (帶 `c` 前綴、無 `.h`),同樣置於 `std::`。
    • 專案移植舊代碼大量用 `iostream.h` → 批次替換並加上 `std::` 或 `using namespace std;`。

    結論

    `#include ` 是**前標準化時代的遺物**。現代 C++ (C++98 起) **強制使用無 `.h` 的標頭檔並配合 `std` 命名空間**。VS2010+、GCC、Clang 均不再支援 `.h` 版本,請直接使用 `` 等標準標頭。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved