当前位置: 首页 > news >正文

命名空间 namespace

一、命名空间的定义

定义命名空间,使用namespace关键字,后面跟命名空间的名字,然后接一对花括号{ } 即可,{ }中即为命名空间的成员。

1.一般定义

namespace test
{int a = 10;int b = 100;int ADD(int x, int y){return x + y;}
}

2.嵌套定义

namespace test
{int a = 10;int b = 100;int Add(int x, int y){return x + y;}namespace test2{int c(99);int d(9);//c++可以使用括号来进行列表初始化int Sub(int x, int y){return x - y;}}
}

3.重名定义

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

例如:

namespace N1  //N1是命名空间的名称
{//用花括号{ }将命名空间的内容包起来//命名空间的内容,即可以定义变量,也可以定义函数int a;int Add(int x, int y){return x + y;}
}namespace N1  //再次定义命名空间 N1
{int Mul(int x, int y){return x * y;}
}

实际上等同于:

namespace N1  //N1是命名空间的名称
{//用花括号{ }将命名空间的内容包起来//命名空间的内容,即可以定义变量,也可以定义函数int a;int Add(int x, int y){return x + y;}int Mul(int x, int y){return x * y;}
}

二、命名空间的使用

C++为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中要使用标准库里面的东西,有三种方式:

  1. 加命名空间的名称及作用域限定符。
  2. 使用using引入命名空间的成员。
  3. 使用using namespace 命名空间名称引入,将所有名称全展开。

1.命名空间的名称及作用域限定符

代码如下:

namespace test
{int a = 10;int b = 100;int Add(int x, int y){return x + y;}namespace test2{int c(99);//c++可以使用括号来进行初始化int d(9);int Sub(int x, int y){return x - y;}}
}
int main()
{std::cout << test::Add(test::a, test::b) << std::endl;std::cout << test::test2::Sub(test::test2::c, test::test2::d) << std::endl;return 0;
}

指定命名空间–麻烦,每个地方都要指定,但也是最规范的方式。

2.使用using namespace 命名空间全展开

代码如下:

using namespace std;

把std整个展开,相当于库里面的东西全部到全局域里面去了,使用起来方便但是可能会有与自己命名空间定义的冲突,规范工程中不推荐这种,日常练习可以用这种。

3.使用using引入命名空间的成员

代码如下:

using std::cout;
using std::endl;
int main()
{printf("%d\n", N::a);printf("%d\n", N::b);printf("%d\n", N::Add(1, 2));printf("%d\n", N::Sub(1, 2));int c = 10;printf("%d\n", c);   //局部变量优先,所以c为10printf("%d\n", ::c); //指定访问左边域,空白表示全局域
}

对部分常用的库里面的东西展开->针对1和2的折中方案,项目中也经常使用。

http://www.lryc.cn/news/44775.html

相关文章:

  • 我能“C”——初阶指针(上)
  • Android高级工程师工资为何让人艳羡不已
  • 什么猫猫最受欢迎?Python采集猫咪交易数据
  • 使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问
  • 行业盛会|2023中国(东莞)国际测量控制及仪器仪表展览会
  • redis集群 服务器重启测试
  • Diffusion的unet中用到的AttentionBlock详解
  • ElasticSearch索引文档写入和近实时搜索
  • 【C语言蓝桥杯每日一题】——等差数列
  • EM7电磁铁的技术参数
  • 选择很重要,骑友,怎么挑选骑行装备?
  • 【JUC面试题】Java并发编程面试题
  • spark笔记
  • 丢失了packet.dll原因和解决方法全面指南
  • 算法练习随记(三)
  • 基于Python 进行卫星图像多种指数分析
  • (Week 15)综合复习(C++,字符串,数学)
  • 迪赛智慧数——柱状图(正负条形图):“光棍”排行榜TOP10省份
  • IDEA集成chatGTP让你编码如虎添翼
  • Python3 os.close() 方法、Python3 File readline() 方法
  • Vision Pro 自己写的一些自定义工具(c#)
  • ARM/FPGA/DSP板卡选型大全,总有一款适合您
  • 【C语言蓝桥杯每日一题】—— 既约分数
  • 【机器学习】线性回归
  • 用ChatGPT学习多传感器融合中的基础知识
  • PyCharm2020介绍
  • Le Potato + Jumbospot MMDVM热点盒子
  • 蓝桥杯第19天(Python)(疯狂刷题第2天)
  • (五)手把手带你搭建精美简洁的个人时间管理网站—基于Axure的首页原型设计
  • 阿里面试:为什么MySQL不建议使用delete删除数据?