2 回答

TA貢獻883條經(jīng)驗 獲得超454個贊
這篇blog是亂寫的! C++ 標準庫里根本沒有 iostream.h 這個頭文件。
為了區(qū)別于 C 標準庫,C++ 標準庫的頭文件都沒有 .h 結(jié)尾。符合標準規(guī)范的編譯環(huán)境根本就不會有 iostream.h 這個頭文件。
我想你應該知道頭文件是做什么用的。C++ 中函數(shù)和變量在使用前需要聲明。頭文件中就是標準庫中一些函數(shù)和變量的聲明,當你需要使用標準庫中的東西時,就要 include 相應的頭文件。
iostream 中是一些和輸入輸出相關(guān)的內(nèi)容,你想要用到這些標注庫中輸入輸出函數(shù)時,就要 include <iostream>。
namespace 是為了解決命名沖突問題而引入的。標準庫中聲明了那么多的函數(shù)和常量,你自己的程序中就不能重復定義這些名字了,要避開不引起命名沖突是很麻煩的。
所以 C++ 引入的 namespace 機制,這些名字可以屬于某個 namespace。使用時可以通過其 namespace 來引用這些名字,這樣就不容易引起命名沖突。
C++ 標準庫中所有的名字都在 std 這個 namespace中,那么比如你要使用標準庫中用于輸入的 cout,就要寫成 std::cout。同時你在自己的程序里重新定義 cout 也不會有問題。
每次使用標準庫中的名字都需要在前面加上 std::,有時會覺得很麻煩,這時可以用到 using 命令:
using namespace std; ?這句告訴編譯器可以直接到 std 中查找名字
這樣你直接寫 cout 時,編譯器就能找到 std 中的 std::cout。
但你這樣做的話,在你的程序中又不能定義和標準庫中同名的名字了。若重新定義的話,編譯器會找到兩個名字(一個是你定義的、一個是 std 中的),這就沖突了。
所以上述方法是不推薦的!是不推薦的!不推薦的!
這違背了引入 namespace 的初衷!本來 namespace 就為了避免命名沖突的,而使用 using namespace std 這樣的命令等于放棄了這個努力。
而有些時候你真的想減少敲 std::。比如你的這段程序中需要寫上百次 std::cout,而且你保證不會重新定義 cout 的話,那你可以使用 using 的另一種形式:
using std::cout; ?這樣你可以在程序中直接寫 cout,編譯器會把它當作 std::cout 的。這就避免了多敲上百次 std::。而且?guī)熘械钠渌诌€限制在 std 中,你還可以重新定義它們,只是不能重定義 cout 了而已。 比如你可以重定義 cin,這不會和 std::cin 沖突。 這樣既能在使用 cout 時省事,又不會影響 namespace 中的其他名字。
- 2 回答
- 1 關(guān)注
- 2879 瀏覽
添加回答
舉報