命名空间
来源:互联网 发布:ubuntu强制关闭程序 编辑:程序博客网 时间:2024/06/14 05:49
作用:解决命名冲突
命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。
通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。
在声明一个命名空间时,花括弧内不仅可以包含变量,而且还可以包含以下类型:
变量(可以带有初始化)
常量
函数(可以是定义或声明)
结构体
类
模板
命名空间(命名空间可以嵌套定义)
例:
namespace ns1{ int a; char c = 10; void fun(); int Add(int a, int b) { return a + b; } namespace ns2 { int b; }}
注意,如果此时想输出b,则需要指定外层和内层的命名空间
cout<<ns1::ns2::b<<endl;
三、使用命名空间成员的方法
1、在引用命名空间成员时,要用命名空间名和作用域解析符对命名空间成员进行限定,以区别不同的命名空间中同名标识符。即 命名空间名::命名空间成员名
2、还可以给命名空间取别名
例:
namespace Television{...}namespace Tv=Television;
则Tv就是命名空间Television的别名,在以后用到Television的地方都可以用Tv进行替换。
3、使用using命名空间成员名
using后面的命名空间成员名必须是有命名空间限制的名字。
例:using ns1::a;
以上语句表明,在using的作用域内如果使用到ns1中的成员a,则不必再用命名空间限定。在以后的程序中如果用到a,则隐含的指ns1::a。 using声明的作用域是从using语句开始,到using所在的作用域结束。要注意,在同一作用域内用using声明的不同的命名空间的成员不能有同名的成员,否则会发生重定义。
4、使用using namespace 命名空间名
第三条介绍的using命名空间成员名,一次只能声明一个命名空间成员,如果一个命名空间中有多个变量,就需要多次使用using命名空间成员名。C++中还提供了using namespace 语句来实现一次声明一个命名空间内的全部成员。
例如:
using namespace ns1;`这里写代码片`
声明了在本作用域中要用到命名空间ns1中的成员,在使用该命名空间内的任何成员时都不必使用命名空间限定。在用using namespace声明的作用域中,命名空间ns1的成员好像在全局域中声明的一样,因此不用加命名限定。
4、无名的命名空间
例:
namespace{ void fun();}
由于没有名字,所以其它文件无法引用,它只能在本文件的作用域内有效,它的作用域使重无名命名空间声明开始到本文件结束。在本文件使用无名命名空间成员时不必用命名空间限定。其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其它文件引用。
5、标准命名空间
C++库的所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(iostream)中的函数、类、对象和类模板是在命名空间std中定义的。所以在C++程序的一开始,就用using namespace对std进行全局声明
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- JavaEE 与 JavaSE区别
- Javascript call 和 apply 用法
- 调用系统相机拍照,并且保存到系统相册一般的方法
- 人工智能+音乐会带来哪些新的不同?
- 容器技术大盘点
- 命名空间
- CentOS中的RPM和YUM命令详解
- XListView的应用步骤
- 使用skimage完成二值图像连通区域标记及属性提取
- idea警告:Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String[]>'
- 将Web项目War包部署到Tomcat服务器基本步骤
- 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单
- 关于OutputDebugStringW()输出调试的使用
- SparseArray 源码解析