隨著項(xiàng)目增大,程序中名稱相互沖突的可能性將增加。使用多個(gè)廠商的類庫時(shí),可能導(dǎo)致名稱沖突。故提供名稱空間工具來更好地控制名稱的作用域。
用namespace聲明名稱空間:
namespace Jack {
int a;
double b;
void show();
}
namespace John {
int a;
double b;
void show();
}
名稱空間可以是全局的,也可以是在另一名稱空間中,但不能在代碼塊中。默認(rèn)情況下,名稱空間中的聲明的名稱時(shí)外部鏈接性的(所有文件通用),除非引用了const。通過作用域解析運(yùn)算符::來使用名稱空間來限定名稱:
Jack::a = 2;
John::show();
我們不希望每次使用名稱時(shí)都進(jìn)行限定,故提供兩種機(jī)制:using聲明和using編譯指令。
using聲明:
using Jack::a;
如果將using聲明放在局部聲明區(qū)域,則將覆蓋同名的全局變量。
using聲明使一個(gè)名稱可用,而using編譯指令使得所有名稱可用:
using namespace Jack;
在全局聲明區(qū)域中使用using編譯指令,則全局可用;在函數(shù)中使用using編譯指令,則在該函數(shù)中可用。
一般來說,using聲明比編譯指令更安全。using編譯指令導(dǎo)入所有名稱,包括可能不需要的名稱。如果此時(shí)與局部名稱沖突,則局部名稱將覆蓋名稱空間版本而不發(fā)出警告。而用using聲明,發(fā)生這種情況編譯器會(huì)指示。
總之,導(dǎo)入名稱時(shí)首選::或using聲明的方法;對(duì)于using聲明,首選將其設(shè)置為局部而不是全局。
老式頭文件iostream.h沒有使用名稱空間,新式iostream使用了std名稱空間。
名稱空間可以嵌套。
創(chuàng)建未命名的名稱空間,相當(dāng)于鏈接性為內(nèi)部的靜態(tài)變量的替代品。由于沒有名字,在其它文件中無法用using。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注