命名空间

1)          命名空间与class/struct等的区别

l       namespace是用来解决C/C++中的名字冲突的;

l       只能在全局空间定义,也就是说不能在函数里或类里定义

l       结尾不用加分号

namespace A

{
}

l       可以在不同文件定义同样名称的名字空间,系统会合并

l       命名空间可以有别名,用于缩短名字,方便书写

namespace bbbbbbbbbbbbbbbbb

{
}

namespace a = bbbbbbbbbbbbbbbbb;

 

2)          匿名命名空间的作用

l       每个文件(编译单元)可定义一个匿名空间

namespace

{

int a;
}

               在编译以后,其实编译器会加一个唯一的名字

        _UNIQUE(类似GUID)

               然后加一个指令using namespace _UNIQUE

l       用于替代static

1)      C++标准提倡使用匿名命名空间来替代static,因为static容易使人混淆(C++Cstatic的定义是不一样的)

2)      static不能用于修饰class,所以你不能防止在另外一个文件使用这个类

 

3)          命名空间的使用

l       用全名访问

A::B::a = 1;

l       引入一个命名空间的所有名字

using root;

l       指定使用某个名字

using root::Func;

 

4)          注意事项

l       如果不注意正确使用using,就会使得namespace失去了这种名字冲突保护。using指令只是在当前文件引入名字,但是如果在头文件中,会被很多文件引入。

所以,如果using会引入一个空间所有的名字,一般不放在头文件中。

 

l       匿名空间的友员函数

namespace A

{

Class B

{

friend void Func();
};

}

void A::Func(){}

Func必须属于namespace A,即要在里面实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值