C 命名空間

2021-08-17 02:21:45 字數 2769 閱讀 7930

命名空間,也就是命名空間/名字空間,注意需要的標頭檔案是iostream,而不是iostream.h,後者是舊版本的c++標頭檔案,並不支援命名空間。

命名空間的巢狀總結

它的作用主要體現在,編寫大型程式或將多個廠商現有的**組合起來,他會使得更容易,更易於組織。

比如說,有兩個已經封裝好的產品,他們呢,都有乙個名叫func()的函式,呼叫這個函式的時候,編譯器將不知道使用哪個函式。

這時候我們可以將其劃定一片區域,即將每個廠商的產品封裝起來,如第乙個廠商的產品放到乙個叫sust的命名空間中,第二個廠商的產品放到乙個叫zju的命名空間中,這樣便能區分開來了。

就像上面舉出的例子,我們有了兩個命名空間,那如何放入呢?

如下:

#include 

namespace

具體:

#include 

namespace sust

}namespace zju

}

再來看呼叫,需要中間加兩個冒號:

當使用sust廠商的func時:

sust

::func();

當使用zju廠商的func時:

zju

::func();

當然,不僅僅是函式,還有變數、類,都可以包括在乙個命名空間中。

我們目前使用的大多函式,都被包括在乙個標準命名空間中——std,例如我們知道的coutcin、還有控制符endl等。

也就是說,當我們輸入輸出時,並不是簡單的輸入輸出即可,而是需要寫上命名空間。如以下這句輸出函式:

std::cout

<< "hello world!"

<< std::endl;

辣麼問題來了,有兩點,第一,我每次都要這麼寫,這就很麻煩了啊,第二,之前的版本(iostream.h),是沒有命名空間的,現在要將之前的**轉換過來,要修改的地方就很多了。於是,一條編譯指令應運而生:

using

namespace

std;

這行**表明,可以使用std命名空間中所有定義的名稱,且不需要使用std::字首。

當然,這會存在潛在的問題(我遇到過似乎…有時候取的變數名稱會和std中的重複,我以前的編譯器會報錯,但是似乎現在g++更新了以後就不會了)。最好的做法是,需要什麼就宣告什麼,例如我們要使用coutcinendl

using :

:;

也就是:

using

std::cout;

using

std::cin;

using

std::endl;

這使得coutcinendl可用。

// 當然,之後應該會再加一些吧,因為後面第九章似乎還會講到命名空間,目前還沒看到,之後補充。

如果乙個命名空間內,有兩個名稱相同的變數呢?要如何加以區分?這就可以使用巢狀了。

如,在sust這個命名空間中,有兩個func函式,可以這麼使用:

namespace sust 

namespace test }}

呼叫時:

sust

::func();

sust

::test

::func();

(話說也不知道是不是真的有場景會用到巢狀…emmmm先寫上再說)

以下為總的一段:

#include 

using

std::cout;

using

std::cin;

using

std::endl;

namespace sust

namespace test

}}namespace zju

}using

namespace sust;

using

namespace zju;

int main(int argc, const

char * argv)

執行結果:

命名空間使得我們的變數、函式、類有了域,將他們侷限在了乙個域之內。在變數名/函式名重複時,可以區分他們屬於哪個命名空間,加以辨別。在大型工程中應該會很好用。

spring p命名空間 c命名空間

p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...

C 命名空間 預設命名空間與匿名命名空間

2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...

C 命名空間,也有叫命名空間

在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免在大規模程式設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用域。std是c...