C++命名空间

  • 命名空间目的:对标识符的名称进行本土化,以避免命名冲突或名字污染。
  • 定义命名空间:
    namespace 命名空间名字
    {
    定义变量;
    定义函数;
    }
    例子:
namespace N
{
int a=1;
int b=2;
int Sub(int left,int right)
{
return left-right;
}
}

上面这种为常见的命名空间方式,还有以下两种方式的命名空间
1.命名空间可以进行嵌套
一个命名空间就是定义了一个新的作用域

namespace N
{
int a=1;
int b=2;
int Max(int left,int right)
{
return left>right?left:right;
}
namespace N1
{
int c;
int d;
int Min(int left,int right)
{
return lef<right?left:right;
}
}
}

2.在同一个工程中,可以定义多个名字相同的命名空间,不会产生冲突,编译器会将多个相同名称的命名空间合成一个命名空间。(但命名空间内变量名必须不同)

namespace N
{
int a=1;
int b=2;
int Sub(int left,int right)
{
return left-right;
}
}
namespace N
{
int c;
int d;
int Min(int left,int right)
{
return lef<right?left:right;
}
}

特例:当嵌套的方式中存在两个名称相同的命名空间时,相当于外层和内层是两个级别的,不会产生冲突,

namespace N
{
int a;
int b;
namespace N
{
int a;
}
}
  • 命名空间的使用方式
    1.命名空间名称::成员
    ::作用域运算符
#include<stdio.h>
namespace N
{
int a=1;
int b=2;
int Sub(int left,int right)
{
return left-right;
}
}
int a=3;
int main()
{
int a=4;
printf("a=%d\n",a);//a=4 就近原则

printf("a=%d\n",::a);//a=3 ::a说明访问的是全局变量

printf("a=%d\n",N::a);//a=4 访问命名空间N中的a
return 0;
}

2.using 命名空间的名字::成员
当一个命名空间中的成员被频繁使用时,可以使用这种方式,相当于定义了一个全局变量

#include <stdio.h>
namespace N
{
int a=1;
int b=2;
int Sub(int left,int right)
{
return left-right;
}
}
using N::b;
int b;//此时会产生冲突,因为using N::b相当于全局变量
int main()
{
printf("b=%d\n",b);
printf("b=%d\n",b/2);
printf("b=%d\n",b*2);
return 0;
}

3.using namespace 命名空间名字
当命名空间中的大多数成员都被使用的很频繁时,使用此方式,相当于把当前命名空间中所有成员当成该文件的全局变量

#include <stdio.h>
namespace N
{
int a=1;
int b=2;
int Sub(int left,int right)
{
return left-right;
}
}
int main()
{
printf("a=%d\n",a);
printf("b=%d\n",b);
Sub(10,2);
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值