51 CPP命名空间

在实际开发中,较大的羡慕会使用大量的全局名字,如类、函数、模板、变量等,很容易出现名字冲突的情况。

命名空间分割了全局空间,每个命名空间是一个作用域,防止名字冲突

一、语法

创建命名空间:

namespace 命名空间的名字

{

//类、函数、模板、变量的声明和定义

}

创建命名空间的别名

namespace 别名=原名;

二、使用命名空间

在同一命名空间的名字可以直接访问,该命名空间之外的代码则必须明确指出命名空间。

1 运算符::

语法:命名空间::名字

简单明了,且不会造成任何冲突,但使用起来比较繁琐。

2 using声明

语法:using 命名空间::名字

用using声明后,就可以直接使用名称。

如果该声明区域有同名的名字,则会报错。

3 using编译指令

语法:using namespace 命名空间

using编译指令将使整个命名空间中的名字可用。如果声明区域有相同的名字,局部版本将隐藏命名空间中的名字,不过可以使用域名解析符使用命名空间的名称。

注意事项:

1 命名空间是全局的,可以分布在多个文件中。

2 命名空间可以嵌套。

3 在命名空间中声明全局变量,而不是使用外部全局变量和静态变量。(开发经验)

如果全局变量,你只在源文件中定义,不在头文件中声明,那么它只能在命名空间内部使用,外部根本不知道到,效果和静态变量是一样的。

4 对using声明,首选将其作用域设置为局部而不是全局。

意思就是放在函数里面,而不是放到外面。

5 不要在头文件中使用using编译指令,如果非要使用,应将它放在所有的#include之后

如果那么做,整个命名空间中的名称将在整个项目的全局区域可用,与命名空间的设计理念不符。(开发经验)

6 匿名的命名空间,从创建的位置到文件结束有效。

如果命名空间没有名字,那么它里面的名称在当前文件中可以直接使用,且,因为它没有名字,所以其它的人和程序都用不了它里面的东西。

 

#include <iostream>
using namespace std;
namespace
{
    int ii = 11;
}
void test()
{
    cout << ii << endl;
}
int main()
{
    test();
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值