1、什么是namespace
命名空间最大的作用,其实是为了避免变量或函数重命名的问题。试想,一个项目组内多个工程师进行开发,有可能会出现全局变量或函数重名的现象,而如果每个人都定义了自己的命名空间,就可以解决这个问题,即使重名,只要分属不同的命名空间就不会引起问题。
这样大家应该明白了,命名空间就是将多个变量和函数等包含在内,使其不会与命名空间外的任何变量和函数等发生重命名的冲突。
2、自定义namespace
有两种形式的命名空间——有名的和无名的。
命名空间的定义格式为:(取自C++标准文档)
named-namespace-definition:
unnamed-namespace-definition:
namespace-body:
--------------------------------------------------
有名的命名空间:
无名的命名空间:
-------------------------------------------------
命名空间的成员,是在命名空间定义中的花括号内声明了名称。可以在命名空间的定义内,定义命名空间的成员(内部定义)。也可以只在命名空间的定义内声明成员,而在命名空间的定义之外,定义命名空间的成员(外部定义)。
命名空间成员的外部定义的格式为:
命名空间名::成员名 ……
// out.h
namespace Outer { //命名空间Outer的定义
}
void Outer::f() {i--;} //命名空间Outer的成员f()的外部定义
void Outer::Inner::h() {i--;} //命名空间Inner的成员h()的外部定义
// namespace Outer::Inner2 {} //错误,不能在外部定义子命名空间
3、注意:
不能在命名空间的定义中声明(另一个嵌套的)子命名空间,只能在命名空间的定义中定义子命名空间。
也不能直接使用“命名空间名::成员名……”定义方式,为命名空间添加新成员,而必须先在命名空间的定义中添加新成员的声明。另外,命名空间是开放的,即可以随时把新的成员名称加入到已有的命名空间之中去。方法是,多次声明和 定义同一命名空间,每次添加自己的新成员和名称。
参考链接:http://blog.sina.com.cn/s/blog_986c99d601010hiv.html