名字空間

名字空間除了系統定義的名字空間之外,還可以自己定義,定義名字空間用關鍵字“namespace”,使用名字空間時用符號“::”指定。

一、名字空間的定義

名字空間除了系統定義的名字空間之外,還可以自己定義,定義名字空間用關鍵字“namespace”,使用名字空間時用符號“::”指定。

不指定名字空間的變數或函式都是當前名字空間下的變數或函式。

不定義名字空間的情況下,都屬於全局名字空間。

同一個名字空間可以定義多次。

#include<iostream>

using namespace std;

namespace na

{

void print(int n)

{

//與名字空間nb的函式名相同

cout << "na::print: " << n << endl;

}

}

namespace nb

{

void print(int n)

{

//與名字空間na的函式名相同

cout << "nb::print: " << n << endl;

}

}

namespace na //同一個名字空間可以定義多次

{

void print2(int a, int b)

{

print(a);

print(b);

}

}

int main ( )

{

na::print(3); 指定na下的print函式

na::print(4); 指定na下的print函式

na::print2(5, 6); 指定na下的print2函式

return 0;

}

二、using的使用

使用“using namespace”可以使得後面不需要每次指定名字空間,相當於java中的import功能。不過,多次使用“using namespace”時,被指定的名字空間同時有效,很容易衝突。

#include <iostream>

using namespace std;

namespace na

{

void print(int a) {

cout << "na::print: " << a << endl; }

}

namespace nb

{

using namespace na;

void print2(int a, int b) { //這是nb自身的函式

print(a); //na的函式

print(b); //na的函式}

void print(int n) { //這也是nb自身的函式

cout << "nb::print: " << n << endl; }

}

namespace nc

{

using nb::print2; //指定只使用nb的print2()函式

void print(int a, int b, int c) {

print2(a, b); //這是nb的函式

nb::print(c); //using中沒有指定,所以這兒必須用nb::來指定}

}

int main ( ) {

using namespace na;

print(2);//na的print()函式

//using namespace nb;

//這樣使用時,na和nb同時有效

//print(3);

//編譯系統不清楚究竟調用na和nb中的哪一個,因為函式名和參數相同using namespace nc;

//這樣使用時,na和nc同時有效

print(4, 5, 6); //nc的print()函式的參數與na中的參數不同,所以這兒不出錯。

using nb::print; //指定下面用的print()函式是nb的函式

print(7);

return 0;}

三、用別名指定名字空間

名字空間可以一層層嵌套,指定時也得一層層地指定,這樣很不方便,一般用別名代替就方便多了。

#include <iostream>

using namespace std;

namespace na

{

namespace nb

{ namespace nc

{

int sum(int a, int b) { return a + b; }

}

}

}

namespace A = na::nb::nc;

int main ( )

{

cout << na::nb::nc::sum(5, 11) << endl;

cout << A::sum(6, 12) << endl; return 0;

}

四、沒有名字的名字空間

名字空間的名字也可以省略,稱之為“無名名字空間”,無名名字空間經常被使用,其作用是“內部可以引用,而外部不能引用”。

#include <iostream>

using namespace std;

namespace na {

namespace

{ //無名名字空間

int sum(int a, int b) { return a + b; }

}

int calc(int x, int y)

{ return sum(x, y); //內部可以調用無名名字空間的變數或函式

}

}

int main ( ) {

//cout << na::sum(5, 11) << endl; //因為缺少裡面的名字,所以外部不能調用

cout << na::calc(6, 12) << endl;

return 0;}

相關詞條

相關搜尋

熱門詞條

聯絡我們