您的位置:首页 > 编程语言 > C语言/C++

c++使用命名空间的作用

2009-10-13 13:23 489 查看
标准C++引入命名空间,主要是为了避免成员的名称冲突。若果用户都给自己的命名空间取简短的名称,那么这些(往往同是全局级的)命名空间本身,也可能发生名称冲突。如果为了避免冲突,而为命名空间取很长的名称,则使用起来就会不方便。这是一个典型的两难问题。
标准C++为此提供了一种解决方案——命名空间别名,格式为:
namespace 别名 = 命名空间名;
例如:(AT&T美国电话电报公司)
namespace American_Telephone_and_Telegraph { // 命名空间名太长
class String {
String(const char*);
// ……
}
}
American_Telephone_and_Telegraph::String s1 // 使用不方便
= new American_Telephone_and_Telegraph::String("Grieg");
namespace ATT = American_Telephone_and_Telegraph; // 定义别名
ATT::String s2 = new ATT::String("Bush"); // 使用方便
ATT::String s3 = new ATT::String("Nielsen");

<!--[if !supportLists]-->l <!--[endif]-->无名命名空间
标准C++引入命名空间,除了可以避免成员的名称发生冲突之外,还可以使代码保持局部性,从而保护代码不被他人非法使用。如果你的目的主要是后者,而且又为替命名空间取一个好听、有意义、且与别人的命名空间不重名的名称而烦恼的话,标准C++还允许你定义一个无名命名空间。你可以在当前编译单元中(无名命名空间之外),直接使用无名命名空间中的成员名称,但是在当前编译单元之外,它又是不可见的。
无名命名空间的定义格式为:
namespace {
声明序列可选
}
实际上,上面的定义等价于:(标准C++中有一个隐含的使用指令)

namespace $$$ {
声明序列可选
}
using namespace $$$;
例如:

namespace {
int i;
void f() {/*……*/}
}
int main() {
i = 0; // 可直接使用无名命名空间中的成员i
f(); // 可直接使用无名命名空间中的成员f()
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: