在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免在大规模程序设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。

std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类iostream、vector等都定义在该命名空间中,使用时要加上using声明(using namespace std) 或命名空间前缀(如std::string、std::vector)。

C中的命名空间

  • 在C语言中只有一个全局作用域
    - C语言中所有的全局标识符共享同一个作用域
    - 标识符之间可能发生冲突 。

C++中提出了命名空间的概念

  • 命名空间将全局作用域分成不同的部分
  • 不同命名空间中的标识符可以同名而不会发生冲突
  • 命名空间可以相互嵌套
  • 全局作用域也叫默认命名空间,

C++命名空间的定义:
namespace name { … }
name可以省略,变成匿名命名空间,匿名命名空间内的东西在命名空间外就没办法访问了。

C++命名空间的使用:

  • 使用整个命名空间:using namespace name;
  • 使用命名空间中的变量:using name::variable;
  • 使用默认命名空间中的变量:::variable
  • 命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。
    所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。

当使用的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做: std::cout。

c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。

#include "iostream"
using namespace std;//1 文件中iostream 没有引入标准的 std ; 需要我们程序员手工的写
//2 如果不写 using namespace std; 需要显示地指定命名空间前缀void test01()
{std::cout << "namespace test01" << std::endl;
}//3 定义命名空间namespace  namespaceA
{int a = 10;
}// 命名空间嵌套
namespace  namespaceB
{int a = 20;namespace namespaceC{struct Teacher{char name[32];int age;};}
}//4 使用命名空间int  main(void)
{using namespace namespaceA;using namespace namespaceB;cout << namespaceA::a << endl;cout << namespaceB::a << endl;//显示方式,需要写全{//namespaceB::namespaceC::Teacher t1;//t1.age = 28;}using namespaceB::namespaceC::Teacher;Teacher t2;t2.age = 29;cout << "t2.age:" << t2.age << endl;return 0;
}

C++ 命名空间,也有叫名称空间相关推荐

  1. python全局名称空间_python名称空间,命名空间

    全局名称空间:在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内存, 表 ...

  2. Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...

    Python Day 10  函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal) 名称空间(命名空间): 当程序运行时,代码从上至下一次读取,遇到变量与值, ...

  3. jaxb 命名空间_在JAXB解组期间应用名称空间

    jaxb 命名空间 对于某些XML模式来说,它是一组严格的规则,用于规定XML文档的结构方式. 但是对于其他人来说,通常的准则是指出XML的外观. 这意味着有时出于某些原因,人们希望接受不符合XML模 ...

  4. java xpath 命名空间_java-关于使用Saxon使用默认名称空间对xml进行xpath解析

    我想要一些有关使用saxon解析默认名称空间的xpath的信息.我正在使用Saxon-HE-9.5.1-3.jar在代码中使用xpath 2功能.在类路径中包含saxon库之后,我面临着解析具有默认名 ...

  5. php限定名称写法,php命名空间:非限定名称、限定名称、完全限定名称实例详解...

    在php命名空间中,需要知道关于空间三种名称的术语:非限定名称.限定名称.完全限定名称,以及PHP是怎样解析它们的.官方文档说得非常好,就直接拿来套了,了解它们对学习后面的内容很有帮助.前面了解到命名 ...

  6. python 类的执行中保部存值_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  7. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  8. 创建一个属于自己的名称空间.

    用VB.NET打造NameSpace 微软公司推出的.Net FrameWork SDK是专门为.Net程序开发语言提供的一个内容庞大的软件开发包.其中基本元素就是名称空间(NameSpace),名称 ...

  9. python的全称_python名称空间介绍

    python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...

最新文章

  1. 保洁阿姨看完都会了!java导出excel并下载详解
  2. visual studio 重命名项目和程序集名称
  3. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-目录
  4. 如何修改MFC的图标
  5. Java中的正则表达式–软介绍
  6. bzoj 4300: 绝世好题
  7. 瞎扯系列:判断NPN及PNP管型之右手定则
  8. 华南理工大学计算机专业研究生分数线,2020华南理工大学研究生分数线汇总(含2016-2020历年复试)...
  9. 自己编译nvm-window,解决无法修改镜像下载node很慢的问题!
  10. 升降压电路的设计和分析
  11. jQuery 中console.log什么意思
  12. 演讲实录:“分布式数据库海量数据存储和实时查询实现与应用”
  13. 微信小程序实现跳转到另外一个小程序的方法
  14. Python动画制作:90秒倒计时圆形进度条效果
  15. c++中fabs()和abs()的区别
  16. Mycat从入门到放弃
  17. dsp控制buck电路电流环推倒与pi调节器设计
  18. 毫秒服务引擎msec
  19. Java毕设|课设项目-蛋糕店商城管理系统
  20. STC89C51——中断系统

热门文章

  1. sublime的一些使用技巧
  2. 计算机主机无反应,详解电脑开机没反应怎么办
  3. 双心ping GUI工具1.0
  4. 分享一个使用HTML+js制作爱心代码
  5. 感动:我奋斗了18年才和你坐在一起喝咖啡(转)
  6. 数据分析入门学习指南|零基础小白必看
  7. matlab删除矩阵一列数据,matlab中实现矩阵删除一行或一列的方法
  8. 富士康Java开发面试题目
  9. [Vulhub] ThinkPHP漏洞合集
  10. GZIPOutputStream GZIPInputStream 数据压缩解压