名字空间(namespace)

      作用:缓解名字污染。

      访问名字空间内成员、类的三种方式:

1、名字空间别名

namespace International_Business_Machines
{
int a;
....
}
//别名
namespace IBM = International_Business_Machines

IBM::a = 100;

以关键字namespace开头,且最后没有“;”号。


2、using声明

用法using 空间名::成员。

作用:让空间名中的某成员可见。

using 声明引入的名字有以下特性:

      1)它在该域中必须惟一
      2)由外围域中的声明引入的相同名字被其隐藏
      3)它被嵌套域中的相同名字的声明隐藏
如:

namespace blip 
{
   int bi = 16, bj = 15, bk = 23;
   // 其他声明
}

int bj = 0;
void manip() 
{
   using blip::bi; // 函数 manip() 中的 bi 指向 blip::bi
   ++bi; // 设置 blip::bi 为 17
   using blip::bj; // 隐藏全局域中的 bj
   // 在函数 manip() 中的bj 指向 blip::bj
   ++bj; // 设置 blip::bj 为 16
   int bk; // bk 在局部域中声明
   using blip::bk; // 错误: 在 manip() 中重复定义 bk
}

int wrongInit = bk; // 错误: bk 在这里不可见应该用 blip::bk

3、using指示符

用法using namespace 空间名

作用:让空间名内的成员都可见。

 using 指示符使名字空间成员名可见就好像它们是在名字空间被定义的地方之外被声明的一样。如:


namespace blip 
{
   int bi = 16, bj = 15, bk = 23;
   // 其他声明
}

int bj = 0;

void manip() 
{
   using namespace blip; // using 指示符 -
   // ::bj 和 blip::bj 之间的冲突只在bj 被使用时才被检测到
   ++bi; // 设置 blip::bi 为 17
   ++bj; // 错误: 二义性
   // 全局 bj 还是 blip::bj?
   ++::bj; // ok: 设置全局 bj 为 1
   ++blip::bj; // ok: 设置 blip::bj 为 16
   int bk = 97; // 局部 bk 隐藏 blip::bk
   ++bk; // 设置局部 bk 为 98
}


     最后,说下未命名的名字空间的作用,成员相当于被static修示,只在本文件内可见,其他文件访问不到。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值