第一章 01 namespace 命名空间
一、什么是namespace?
namesapce是为了防止名字冲突提供的一种控制方式。
当一个程序需要用到很多的库文件的时候,名字冲突有时无法避免。之前的解决思路是使用更长的变量名字,使用不方便。
二、命名空间的定义
1、namespace 空间名称 {
变量;
函数;
类;
}
三、命名空间的特点
1、每个命名空间都有自己的作用域;
2、命名空间可以是不连续的,正像代码中的所列举的例子;
1.1 如何理解命名空间的作用域
namespace global_namespace{
namespace local_namespace_1{
int i;
int j;
}
namespace local_namespace_2{
int i;
int j;
}
}
LINE6~7和LINE13~14均定义相同的变量,但是不会冲突;
因为引用的时候分别为
global_namespace::local_namespace_1::i=10;
global_namespace::local_namespace_2::i=10;
在使用的时候,需要明确的指出变量所在的空间,因为不会冲突啦!不过这种写法,看着就有崩溃的赶脚。
幸好,在同一个命名空间内的应用是不需要这样啰嗦的
namespace local_namesapce_3{
int i=;
int j=;
int sum = i+j; //这里是不需要写出变量所在的命名空间的
}
1.2 命名空间可以是不连续的,改如何理解呢?
当我们定义了一个命名空间的时候,可能有两种情况:
1)之前从来没有定义过,这里是第一次定义命名空间;
2)之前已经定义过,这里则意味着为原来的命名空间增加一些新的成员
这里以第二种情况举例:
在aa.hh头文件中定义了命名空间
namespace namespace_test{
int i;
int j;
}
接着我们在bb.hh头文件中也定义一个具有相同名字的命名空间
namespace namespace_test{
int i;
int j;
}
编译看看会出现什么惊喜呢。。。。
error: redefinition of `int namespace_test::i'
error: `int namespace_test::i' previously declared here
编译结果,可以表明,虽然命名空间分别定义在不同的文件中,空间上是离散的,但是编译器仍然认为两者是在同一个命名空间,所以会给出变量重复定义的错误!
OK,关于namespace的特性分析就暂时到这里,以后遇到会继续深入补充。。。。。
四、命名空间的类型
1、全局命名空间(global namespace)
2、内联命名空间(inline namesapce)
3、未命名的命名空间(unnamed namespace)
$$4.1理解什么是全局命名空间
书中说,全局命名空间是以隐式的方式声明,什么是隐式呢?也就是说,即使你什么也不做,你的代码中会一直漂浮着这么一张全局的网,你所定义、声明的变量、函数和类均在它的笼罩之下。当然对于这种看不见的网,也不是一点也摸不着的。对其内部的变量是可以通过下述的方式引用的:
::members 因为这个隐式的全局命名空间没有名字,所以就只能以无名英雄来称呼他了。
/***************************************************************************************************************/
$$4.2 理解什么是内联命名空间
定义:
inline namespace 空间名称{
}
这个是C++11的新特性了
/***************************************************************************************************************/
$$4.3 理解什么是未命名空间
未命名空间仅仅在特定的文件内有效,不同文件的未命名空间不关联。此外,未命名空间声明的变量和语句,其声明周期一直延续到程序的结束,拥有静态生命周期。
在C语言中,我们一般用static关键词来定义全悲剧变量和函数,以保证其仅仅在当前文件内被访问。同样的道理,我们这里可以采用未命名空间来实现这一目的。
C++中已经取消了使用static的方法。
第一章 01 namespace 命名空间的更多相关文章
- Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...
- 【翻译习作】 Windows Workflow Foundation程序开发-第一章01
第 1 章 欢迎来到工作流的世界 …思想如蝴蝶般飞到我身边 —— Gossard / Vedder (译注:Gossard与Vedder是来自Pearl Jam乐队的2名乐手,该句出自他们的歌曲 ...
- 第一章01:熟悉java,发展历史
1. java由来: 原公司,sun,后来被oracle\甲骨文公司收购 java,主要用于开发互联网软件,例如:QQ.迅雷.淘宝.京东
- 【翻译习作】 Windows Workflow Foundation程序开发-第一章04
1.2.3 Windows Workflow运行时 从Windows Workflow的角度看,可以将工作流活动当成是交给一个工作流处理器去执行的一系列指令或操作码.在Windows Workflo ...
- 【翻译习作】 Windows Workflow Foundation程序开发-第一章03
1.2.2.Visual Studio 2005扩展包 微软也为Windows Workflow开发者提供了Visual Studio 2005扩展包.扩展包将许多功能集成到Visual Studio ...
- 【翻译习作】 Windows Workflow Foundation程序开发-第一章05
1.3 开发我们的第一个工作流 也许你曾经在这样的产品经理手下搞过开发:他总是在你身边转悠,并不时的问一句“你还没做完吗?”.在这一部分,我们将用一个简单的Windows Workflow程 ...
- 【翻译习作】 Windows Workflow Foundation程序开发-第一章02
1.2 Windows Workflow概览 微软的Windows Workflow Foundation(简称WF)是.NET框架3.0版的一部分..NET3.0其它主要部分是Window ...
- Jenkins入门系列之——01第一章 Jenkins是什么?
第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目. l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安 ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
随机推荐
- delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码
unit1 [delphi] view plain copyunit Unit1; interface uses Windows, Messages, SysUtils, Variants, Clas ...
- 020自动化测试 PK 手动测试
一.手工测试为什么不可替代 手工测试是不可替代的,因为人是具有很强只能判断能力的,而工具是相对机械缺乏思维能力的东西 工具是人开发出来的 二.手工测试不可替代的表现 测试用例的设计:需要tester有 ...
- 对单片机的modbus RTU的详细解释(转载)
Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽然RTU比较简单,但是看协议资料 ...
- 神经网络的学习 Neural Networks learing
1.一些基本符号 2.COST函数 ================Backpropagation Algorithm============= 1.要计算的东西 2.向前传递向量图,但为了计算上图的 ...
- 【暑假】[深入动态规划]UVa 10618 Fixing the Great Wall
UVa 10618 Fixing the Great Wall 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=361 ...
- javascript设计模式6
单体模式:用来划分命名空间而组织一些方法和属性的对象,如果它能被实例化,只能被实例化一次:但对象不是单体 var Singleton={ attr1:true; attr2:2, method1:fu ...
- Hubot Slack CoffeeScript
公司买了一台Mac Pro,为了物尽其用,研究了半天把hubot-slack装好了,然后又花了点时间学习CoffeeScript(照着例子写也足够了).用slack来发版本还是很爽的.
- BNUOJ-26586 Simon the Spider 最小生成树+枚举
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26586 题意:给一个图,每条边有一个权值.要你求选择一棵树,权值和为sum,然后在树上选择 ...
- 通过在shell脚本中用scp或rsync实现远程同步文件
通过在shell脚本中用expect实现远程scp文件 shell expect的简单用法 http://myunix.blog.51cto.com/191254/1095074 http://ji ...
- Umbraco中的ModelBuilder
Umbraco中的ModelBuilder有以下几种形式 Pure Live models Dll models LiveDll models AppData models LiveAppData m ...