std空間和全域性命名空間

2021-09-20 07:56:35 字數 1273 閱讀 2465

參考資料

注意不要盲目相信以下內容!不要盲目相信以下內容!
在c++中,我們常用的標頭檔案為不帶「.h」字尾的標頭檔案,而這些標頭檔案裡所包含和定義的識別符號在std空間中,所以我們使用c++時經常需要加上

using

namespace

std;

而原c語言的標頭檔案為帶「.h」字尾的標頭檔案,這些標頭檔案裡所包含和定義的識別符號在全域性命名空間中,不需要宣告使用std空間。

命名空間是一種特殊的作用域,它包含了處於該作用域中的所有標示符,而且其本身也是由標示符表示的。

拿乙個簡單的例子來模擬,當我們在c++中宣告了乙個類a之後,我們在類外定義類a的成員函式,這時我們需要在返回值後函式名之前加上

a::
來說明該函式為類a的成員函式。

命名空間也一樣是用來說明識別符號的所屬範圍,命名空間的使用目的是為了將邏輯相關的標示符限定在一起,組成相應的命名空間,可使整個系統更加模組化,最重要的是它可以防止命名衝突。

就好比在兩個函式或類中定義相同名字的物件一樣,利用作用域標示符限定該物件是哪個類裡定義的。

c++語言是從c語言發展起來的,因此有很多借鑑的地方。當c++語言推出但尚未標準化以前(98年才標準化),市場上已經有了很多版本的程式庫了,各庫林立,導致互相應用時出現了乙個很難調和的難題,那就是命名衝突,又稱名空間氾濫。

比如某個庫寫了個函式line(int x,int y);不巧另外乙個庫又寫了個類class line;這下編譯器該匹配哪個呢?只好取決於哪個庫檔案先被引用到檔案中,並且把另外乙個完全遮蔽掉。這顯然不是乙個好的方法。

在標準庫的產生過程中,這個問題被提了出來。為此,標準庫組織決定在標準庫中引入名空間的概念,所有標準庫的元件都在名空間std中定義,由使用者手動引入到程式中,這樣就讓編譯器知道,當遇到乙個可能衝突的名稱時,以標準庫中定義的名稱為主,如果想用標準庫外定義的名稱,那程式設計師需要自己註明另外的名空間,從而達到消除名空間氾濫的目的。

using

namespace

std;

的寫法引入了名空間的所有內容,這是一種簡單但不保險的做法,是標準庫組織不推薦這麼做的。因為這樣引入了所有的元件函式名,相當於重新引發了名字空間氾濫的問題。為此,好的做法應該是第二種分別引入。

c++std命名空間詳解

c++標準庫 及 命名空間std

C 命名空間與std

本文參考 1.命名空間是啥 舉個栗子,班上有學生 張三 李三 王三 如果你大吼一聲 三兒 肯定三個人一起懵圈地看著你,為了避免這麼尷尬的情況發生,機智的中國人發明了 姓氏 你先去張家族,再喊 三兒 那大家都知道是張三了。同理,調取乙個變數a,就相當於喊了一聲 三兒 為了避免誤會,你得給他加個姓氏,也...

C 標準命名空間std

輸入輸出要用到這個.標準c 庫的所有的識別符號都是在乙個名為std的命名空間中定義的,或者說標準標頭檔案 如iostream 中函式 類 物件和類模板是在命名空間 std中定義的。std是standard 標準 的縮寫,表示這是存放標準庫的有關內容的命名空間。二元作用域分辨運算子 using std...

C 標頭檔案和std命名空間

c 是在c語言的基礎上開發的,早期的 c 還不完善,不支援命名空間,沒有自己的編譯器,而是將 c 翻譯成c 再通過c編譯器完成編譯。這個時候的 c 仍然在使用c語言的庫,stdio.h stdlib.h string.h 等標頭檔案依然有效 此外 c 也開發了一些新的庫,增加了自己的標頭檔案,例如 ...