一、為什么使用命名空間
創(chuàng)新互聯(lián)是一家專業(yè)提供中山企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計、小程序制作等業(yè)務(wù)。10年已為中山眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。一個大型的工程往往是由若干個人獨立完成的,不同的人分別完成不同的部分,最后再組合成一個完整的程序。由于各個頭文件是由不同的人設(shè)計的,有可能在不同的頭文件中用了相同的名字來命名所定義的類或函數(shù),這樣在程序中就會出現(xiàn)名字沖突。不僅如此,有可能我們自己定義的名字會與C++庫中的名字發(fā)生沖突。
名字沖突就是在同一個作用域中有兩個或多個同名的實體,為了解決命名沖突 ,C++中引入了命名空間,所謂命名空間就是一個可以由用戶自己定義的作用域,在不同的作用域中可以定義相同名字的變量,互不干擾,系統(tǒng)能夠區(qū)分它們。
二、什么是命名空間
命名空間是程序設(shè)計者命名的內(nèi)存區(qū)域,程序設(shè)計者根據(jù)需指定一些有名字的空間域,把一些全局實體分別存放到各個命名空間中,從而與其他全局實體分隔開。
通俗的說,每個名字空間都是一個名字空間域,存放在名字空間域中的全局實體只在本空間域內(nèi)有效。名字空間對全局實體加以域的限制,從而合理的解決命名沖突。
例:
namespace na
{
int a;
char c;
}
則 a和c只在na的作用域內(nèi)有效。
在聲明一個命名空間時,花括弧內(nèi)不僅可以包含變量,而且還可以包含以下類型:
變量(可以帶有初始化)
常量
函數(shù)(可以是定義或聲明)
結(jié)構(gòu)體
類
模板
命名空間(命名空間可以嵌套定義)
例:
namespacens1
{
int a;
char c = 10;
void fun();
int Add(int a, int b)
{
return a + b;
}
namespace ns2
{
int b;
}
}
注意,如果此時想輸出b,則需要指定外層和內(nèi)層的命名空間
cout< 三、使用命名空間成員的方法 1、在引用命名空間成員時,要用命名空間名和作用域解析符對命名空間成員進行限定,以區(qū)別不同的命名空間中同名標識符。即 命名空間名::命名空間成員名 2、還可以給命名空間取別名 例: namespace Television {...} namespace Tv=Television; 則Tv就是命名空間Television的別名,在以后用到Television的地方都可以用Tv進行替換。 3、使用using命名空間成員名 using后面的命名空間成員名必須是有命名空間限制的名字。 例:using ns1::a; 以上語句表明,在using的作用域內(nèi)如果使用到ns1中的成員a,則不必再用命名空間限定。在以后的程序中如果用到a,則隱含的指ns1::a。 using聲明的作用域是從using語句開始,到using所在的作用域結(jié)束。要注意,在同一作用域內(nèi)用using聲明的不同的命名空間的成員不能有同名的成員,否則會發(fā)生重定義。 4、使用using namespace 命名空間名 第三條介紹的using命名空間成員名,一次只能聲明一個命名空間成員,如果一個命名空間中有多個變量,就需要多次使用using命名空間成員名。C++中還提供了using namespace 語句來實現(xiàn)一次聲明一個命名空間內(nèi)的全部成員。 例如: using namespace ns1; 聲明了在本作用域中要用到命名空間ns1中的成員,在使用該命名空間內(nèi)的任何成員時都不必使用命名空間限定。在用using namespace聲明的作用域中,命名空間ns1的成員好像在全局域中聲明的一樣,因此不用加命名限定。 4、無名的命名空間 例: namespace { void fun(); } 由于沒有名字,所以其它文件無法引用,它只能在本文件的作用域內(nèi)有效,它的作用域使重?zé)o名命名空間聲明開始到本文件結(jié)束。在本文件使用無名命名空間成員時不必用命名空間限定。其實無名命名空間和static是同樣的道理,都是只在本文件內(nèi)有效,無法被其它文件引用。 5、標準命名空間 C++庫的所有標識符都是在一個名為std的命名空間中定義的,或者說標準頭文件(iostream)中的函數(shù)、類、對象和類模板是在命名空間std中定義的。所以在C++程序的一開始,就用using namespace對std進行全局聲明。 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞名稱:深入理解命名空間-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/dojohe.html