首页 > 学院 > 开发设计 > 正文

名称空间

2019-11-11 06:39:48
字体:
来源:转载
供稿:网友

随着项目增大,程序中名称相互冲突的可能性将增加。使用多个厂商的类库时,可能导致名称冲突。故提供名称空间工具来更好地控制名称的作用域。

用namespace声明名称空间:

namespace Jack {

int a;

double b;

void show();

}

namespace John {

int a;

double b;

void show();

}

名称空间可以是全局的,也可以是在另一名称空间中,但不能在代码块中。默认情况下,名称空间中的声明的名称时外部链接性的(所有文件通用),除非引用了const。

通过作用域解析运算符::来使用名称空间来限定名称:

Jack::a = 2;

John::show();

我们不希望每次使用名称时都进行限定,故提供两种机制:using声明和using编译指令。

using声明:

using Jack::a;

如果将using声明放在局部声明区域,则将覆盖同名的全局变量。

using声明使一个名称可用,而using编译指令使得所有名称可用:

using namespace Jack;

在全局声明区域中使用using编译指令,则全局可用;在函数中使用using编译指令,则在该函数中可用。

一般来说,using声明比编译指令更安全。using编译指令导入所有名称,包括可能不需要的名称。如果此时与局部名称冲突,则局部名称将覆盖名称空间版本而不发出警告。而用using声明,发生这种情况编译器会指示。

总之,导入名称时首选::或using声明的方法;对于using声明,首选将其设置为局部而不是全局。

老式头文件iostream.h没有使用名称空间,新式iostream使用了std名称空间。

名称空间可以嵌套。

创建未命名的名称空间,相当于链接性为内部的静态变量的替代品。由于没有名字,在其它文件中无法用using。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表