你真的懂C++中的namespace用法
namespace
中文意思是命名空間或者叫名字空間,傳統(tǒng)的C++只有一個(gè)全局的namespace,但是由于現(xiàn)在的程序的規(guī)模越來越大,程序的分工越來越細(xì),全局作用域變得越來越擁擠,每個(gè)人都可能使用相同的名字來實(shí)現(xiàn)不同的庫,于是程序員在合并程序的時(shí)候就會(huì)可能出現(xiàn)名字的沖突。namespace引入了復(fù)雜性,解決了這個(gè)問題。namespace允許像類,對象,函數(shù)聚集在一個(gè)名字下。本質(zhì)上講namespace是對全局作用域的細(xì)分。
說白了namespace
是怕變量沖突而出現(xiàn)的一種界限,不同的namespace
好比不同的國家,而其中的變量相當(dāng)于政府機(jī)關(guān),而他們都是相互獨(dú)立的!
using namespace std
而using namespace std
簡要意思就是使用標(biāo)準(zhǔn)庫,想知道更清楚的請繼續(xù)往下看
using namespace std 的意思是:
using 和namespace都是C++的關(guān)鍵詞。
std 是標(biāo)準(zhǔn)程序庫所駐之命名空間(namespace)的名稱。
- 如果使用Boost的庫 ,那就寫
using namespace boost
- 如果使用C++標(biāo)準(zhǔn)庫 那就寫
using namespace std
就是暴露std這個(gè)名字空間,你就可以調(diào)用std這個(gè)名字空間下的東西,包含在這個(gè)命名空間的所有類還有函數(shù)都可以使用了
一般的名字空間用法可以 這樣使用:
namespace sdm { int temp; ...... }
那么你在一個(gè)文件中有三種用法:
using namespace sdm;
然后你就可以使用變量temp:
temp=9;
還可以使用sdm中的其他每一個(gè)成員。using sdm::temp;
在這個(gè)文件中只能使用sdm中的temp這個(gè)變量。
你在使用時(shí)直接使用sdm::temp:
cout<<sdm::temp<<endl;
使用其它的成員也這樣調(diào)用。
using namespace
就是怎么把一堆代碼歸在一起,把它們納入一個(gè)space(空間);然后使用它們的時(shí)候,先要聲明使用它所在的這個(gè)空間
例如A B兩個(gè)班都有叫張三的人,你要使用A班的張三,必然要先指名是A班這個(gè)名字空間(namespace),然后你對張三的所有命令才能達(dá)到你的預(yù)想,才不會(huì)叫錯(cuò)人
namespace 就是一個(gè)名字的空間。是為了避免名字沖突而使用的。在不同的空間里可以使用同一個(gè)名字而不會(huì)引起名字沖突。
<iostream>和<iostream.h>
<iostream>和<iostream.h>
是不一樣,前者沒有后綴,實(shí)際上,在你的編譯器include文件夾里面可以看到,二者是兩個(gè)文件,打開文件就會(huì)發(fā)現(xiàn),里面的代碼是不一樣的。- 后綴為.h的頭文件c++標(biāo)準(zhǔn)已經(jīng)明確提出不支持了,早些的實(shí)現(xiàn)將標(biāo)準(zhǔn)庫功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c++標(biāo)準(zhǔn)為了和C區(qū)別開,也為了正確使用命名空間,規(guī)定頭文件不使用后綴.h。
- 因此,在使用<iostream.h>時(shí),相當(dāng)于在c中調(diào)用庫函數(shù),使用的是全局命名空間,也就是早期的c++實(shí)現(xiàn);當(dāng)使 用的時(shí)候,該頭文件沒有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。
namespace
所謂namespace,是指標(biāo)識(shí)符的各種可見范圍。C++標(biāo)準(zhǔn)程序庫中的所有標(biāo)識(shí)符都被定義于一個(gè)名為std的namespace中。
由于namespace的概念,使用C++標(biāo)準(zhǔn)程序庫的任何標(biāo)識(shí)符時(shí),可以有三種選擇:
直接指定標(biāo)識(shí)符。例如std::ostream而不是ostream。完整語句如下:
std::cout << std::hex << 3.4 << std::endl;
使用using關(guān)鍵字。
using std::cout; using std::endl;
以上程序可以寫成
cout << std::hex << 3.4 << endl;
最方便的就是使用using namespace std
:
#include <iostream> #include <sstream> #include <string> using namespace std;
這樣命名空間std內(nèi)定義的所有標(biāo)識(shí)符都有效(曝光)。就好像它們被聲明為全局變量一樣。那么以上語句可以如下寫:
cout << hex << 3.4 << endl;
因?yàn)闃?biāo)準(zhǔn)庫非常的龐大,所程序員在選擇的類的名稱或函數(shù)名時(shí)就很有可能和標(biāo)準(zhǔn)庫中的某個(gè)名字相同。所以為了避免這種情況所造成的名字沖突,就把標(biāo)準(zhǔn) 庫中的一切都被放在名字空間std中。但這又會(huì)帶來了一個(gè)新問題。無數(shù)原有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫中的功能,他們都是在全局空間下 的。
所以就有了<iostream.h>和<iostream>
等等這樣的頭文件,一個(gè)是為了兼容以前的C++代碼,一個(gè)是為了支持新的標(biāo)準(zhǔn)。
命名空間std封裝的是標(biāo)準(zhǔn)程序庫的名稱,標(biāo)準(zhǔn)程序庫為了和以前的頭文件區(qū)別,一般不加".h"
以上就是你真的懂C++中的namespace用法的詳細(xì)內(nèi)容,更多關(guān)于C++中namespace用法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例
這篇文章主要介紹了VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08C++實(shí)現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)字符串和整數(shù)的相互轉(zhuǎn)換的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C++有一定的幫助,需要的可以參考一下2023-01-01C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用
這篇文章主要介紹了C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C++實(shí)現(xiàn)四則運(yùn)算器(無括號(hào))
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)四則運(yùn)算器,無括號(hào)的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11