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