你真的懂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)識符的各種可見范圍。C++標(biāo)準(zhǔn)程序庫中的所有標(biāo)識符都被定義于一個(gè)名為std的namespace中。
由于namespace的概念,使用C++標(biāo)準(zhǔn)程序庫的任何標(biāo)識符時(shí),可以有三種選擇:
直接指定標(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;
因?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)文章
C/C++ Qt 自定義Dialog對話框組件應(yīng)用案例詳解
有時(shí)候我們需要一次性修改多個(gè)數(shù)據(jù),使用默認(rèn)的模態(tài)對話框似乎不太夠用,此時(shí)我們需要自己創(chuàng)建一個(gè)自定義對話框。這篇文章主要介紹了Qt自定義Dialog對話框組件的應(yīng)用,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11
基于C++實(shí)現(xiàn)職工管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于C++實(shí)現(xiàn)職工管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語言實(shí)現(xiàn)求最大公約數(shù)的三種方法
最大公因數(shù),也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。本文將為大家介紹三種方法來實(shí)現(xiàn)求解兩個(gè)正整數(shù)的最大公約數(shù),需要的可以參考一下2021-12-12
VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法示例
這篇文章主要介紹了VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法,涉及VC++針對注冊表的寫入與VC事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
C++利用jsoncpp庫實(shí)現(xiàn)寫入和讀取json文件
JsonCpp 是一個(gè)C++庫,允許操作 JSON 值,包括序列化和反序列化到字符串和從字符串反序列化。本文主要介紹了如何利用jsoncpp庫實(shí)現(xiàn)寫入和讀取json文件,感興趣的可以了解一下2023-04-04

