C++之namespace命名空间

1、什么是namespace

     命名空间最大的作用,其实是为了避免变量或函数重命名的问题。试想,一个项目组内多个工程师进行开发,有可能会出现全局变量或函数重名的现象,而如果每个人都定义了自己的命名空间,就可以解决这个问题,即使重名,只要分属不同的命名空间就不会引起问题。

       这样大家应该明白了,命名空间就是将多个变量和函数等包含在内,使其不会与命名空间外的任何变量和函数等发生重命名的冲突。


2、自定义namespace

有两种形式的命名空间——有名的和无名的。

命名空间的定义格式为:(取自C++标准文档)

named-namespace-definition:

      namespace identifier { namespace-body }

unnamed-namespace-definition:

      namespace { namespace-body }

namespace-body:

      declaration-seqopt
--------------------------------------------------

有名的命名空间:

      namespace 命名空间名 {

             声明序列可选

      }

无名的命名空间:

      namespace {

             声明序列可选

      }

-------------------------------------------------

命名空间的成员,是在命名空间定义中的花括号内声明了名称。可以在命名空间的定义内,定义命名空间的成员(内部定义)。也可以只在命名空间的定义内声明成员,而在命名空间的定义之外,定义命名空间的成员(外部定义)。

命名空间成员的外部定义的格式为:

命名空间名::成员名 ……

// out.h

namespace Outer { //命名空间Outer的定义

      int i; // 命名空间Outer的成员i的内部定义

      namespace Inner { // 子命名空间Inner的内部定义

             void f() { i++; } // 命名空间Inner的成员f()的内部定义,其中的i为Outer::i

             int i;

             void g() { i++; } // 命名空间Inner的成员g()的内部定义,其中的i为Inner::i

             void h(); // 命名空间Inner的成员h()的声明

      }

      void f(); // 命名空间Outer的成员f()的声明

      // namespace Inner2; // 错误,不能声明子命名空间

}

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值