名字空间

更新时间:2024-05-21 13:59

名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。

定义

名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。

#include

using namespace std;

namespace na

{

void print(int n)

{

//与名字空间nb的函数名相同

}

}

namespace nb

{

void print(int n)

{

//与名字空间na的函数名相同

}

}

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 namespace”可以使得后面不需要每次指定名字空间,相当于java中的import功能。不过,多次使用“using namespace”时,被指定的名字空间同时有效,很容易冲突。

#include

using namespace std;

namespace na

{

void print(int a) {

}

namespace nb

{

using namespace na;

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

print(a); //na的函数

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

void print(int n) { //这也是nb自身的函数

}

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

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

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;}

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}