簡體   English   中英

iostream 和 iostream.h 的區別

[英]Difference between iostream and iostream.h

iostreamiostream.h什么區別?

iostream.h已被提供它的編譯器棄用, iostream是 C++ 標准的一部分。

為了明確說明,當前的 C++ 標准 (INCITS ISO IEC 14882 2003) 中根本沒有提到iostream.h

編輯:正如@Jerry 所提到的,不僅當前的標准沒有提到它,而且 C++ 的標准也沒有提到它。

iostream 是標准頭文件。 iostream.h 是一個非標准頭文件,在標准前的 C++ 中非常常見,並且是 iostream 的演變而來。 iostream.h 仍然很常見,大概是為了與舊程序一起使用。

如果您的實現有 iostream.h 的工作副本,它可能與 iostream 相同,只是 iostream 中的所有內容都在std命名空間中,而 iostream.h 通常位於命名空間之前,並且沒有使用它們。

如果您的實現同時具有 iostream 和 iostream.h,那么 iostream 可能會像這樣工作:

namespace std
{
#include <iostream.h>
}

雖然它不一定是這樣寫的。

首次創建 C++ 時,標准運行時庫中的所有文件都以 .h 結尾。 生活是一致的,它是好的。 cout 和 cin 的原始版本位於 iostream.h 中。 當 ANSI 委員會對該語言進行標准化時,他們決定將運行時庫中的所有函數移動到 std 命名空間中(這通常是一個好主意)。 然而,這帶來了一個問題:如果他們將所有函數都移到 std 命名空間中,那么舊的程序將不再起作用!

為了嘗試解決這個問題,同時保持舊程序的向后兼容性,引入了一組新的頭文件,它們使用相同的名稱但缺少 .h 擴展名。 這些新的頭文件在 std 命名空間中具有所有功能。 這樣,包含#include <iostream.h>舊程序不需要重寫,而較新的程序可以#include <iostream>

當您包含標准庫中的頭文件時,請確保使用非 .h 版本(如果存在)。 否則,您將使用不再受支持的已棄用版本的標頭。

此外,許多從 C 繼承而來的在 C++ 中仍然有用的庫被賦予了 ac 前綴(例如 stdlib.h 變成了 cstdlib)。 這些庫中的功能也被移到 std 命名空間中,以幫助避免命名沖突。

但是,當您編寫自己的頭文件時,您應該給它們全部添加 .h 擴展名,因為您不會將代碼放在 std 命名空間中。

規則:使用庫的非 .h 版本(如果存在),並通過 std 命名空間訪問功能。 如果非 .h 版本不存在,或者您正在創建自己的標頭,請使用 .h 版本

來源: https : //www.learncpp.com/cpp-tutorial/19-header-files/

對於初學者來說,這將是一個更簡單的答案!

文件“iostream”是一個標准的 C++ 頭文件,它包含輸入和輸出流和函數的聲明,並提供包裝器 cin 和 cout 供它們使用。 因此,該頭文件中提供了所有基本的 I/O 函數包裝器,並且該頭文件還將包含緩沖區聲明和其他方法的其他頭文件合並為一個。 此標頭已升級以提供類型安全功能和異常處理。 文件“iostream.h”是 1996 年之前不推薦使用的上述頭文件的版本,當時 C++ 尚未標准化。 它在現代編譯器中不再可用,只能在Turbo C 中找到。'using namespace std;' 是一個指令,用於指定編譯器在使用標准函數時使用 std 命名空間。 當 C++ 標准化時,引入了命名空間以避免名稱沖突並防止歧義。 現在,為了將標准頭函數與其他函數區分開來,所有這些函數都被限定在標准命名空間中,並且從頭名稱中刪除了 .h 作為頭標准化的標志。 現在,要使用這些函數,必須包含標題並使用 std:: 范圍名稱。 但是因為這會變得乏味,所以引入 using 指令是為了在每次使用標准函數時簡單地排除 std:: 的類型。

問候,

TechTIQ 解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM