第一章 01 namespace 命名空间

一、什么是namespace?

namesapce是为了防止名字冲突提供的一种控制方式。

当一个程序需要用到很多的库文件的时候,名字冲突有时无法避免。之前的解决思路是使用更长的变量名字,使用不方便。

二、命名空间的定义

1、namespace   空间名称 {

变量;

函数;

类;

}

三、命名空间的特点

1、每个命名空间都有自己的作用域;

2、命名空间可以是不连续的,正像代码中的所列举的例子;

1.1 如何理解命名空间的作用域

 1 namespace global_namespace{
 2
 3
 4              namespace local_namespace_1{
 5
 6               int i;
 7               int j;
 8              }
 9
10
11              namespace local_namespace_2{
12
13               int i;
14               int j;
15              }
16
17
18
19 }

LINE6~7和LINE13~14均定义相同的变量,但是不会冲突;

因为引用的时候分别为

global_namespace::local_namespace_1::i=10;
global_namespace::local_namespace_2::i=10; 

在使用的时候,需要明确的指出变量所在的空间,因为不会冲突啦!不过这种写法,看着就有崩溃的赶脚。

幸好,在同一个命名空间内的应用是不需要这样啰嗦的

1 namespace    local_namesapce_3{
2                              int i=10;
3                              int j=10;
4
5
6                              int sum = i+j; //这里是不需要写出变量所在的命名空间的
7
8
9 }

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 理解什么是未命名空间

时间: 2024-10-06 15:43:27

第一章 01 namespace 命名空间的相关文章

【翻译习作】 Windows Workflow Foundation程序开发-第一章01

第 1 章    欢迎来到工作流的世界 …思想如蝴蝶般飞到我身边 —— Gossard / Vedder (译注:Gossard与Vedder是来自Pearl Jam乐队的2名乐手,该句出自他们的歌曲<Even flow>) Windows Workflow可被看作是继COM+和分布式事务协调器(DTC)之后,Windows平台上最令人瞩目的一款中间件产品.它们之间的区别在于:不是每一个软件应用都需要进行分布式事务处理:但几乎每个软件都要在其内部实现工作流.为了能够领会微软设计Windows

【翻译习作】 Windows Workflow Foundation程序开发-第一章03

1.2.2.Visual Studio 2005扩展包 微软也为Windows Workflow开发者提供了Visual Studio 2005扩展包.扩展包将许多功能集成到Visual Studio里,其中就包括一个用于编制工作流的可视化设计器.下面就是可视化设计器的截屏图. 这个设计器的窗口式样与我们所熟悉的Windows和Web表单设计器保持一致.Toolbox(工具箱)窗口中列出了可以拖放到设计器台面上的所有活动.我们也可以把自定义的活动添加到Toolbox中去.一旦把一个活动放置到设计

【翻译习作】 Windows Workflow Foundation程序开发-第一章05

1.3      开发我们的第一个工作流 也许你曾经在这样的产品经理手下搞过开发:他总是在你身边转悠,并不时的问一句“你还没做完吗?”.在这一部分,我们将用一个简单的Windows Workflow程序把这个招人烦的产品经理替换掉.这个例程无法向你展示WF平台的全部功能,但它可以让你领略到如何用WF创建并运行工作流. 在开始之前,我们需要下载并安装.NET 3.0框架.安装程序可以在 http://netfx3.com 找到.Visual Studio 2005的所有版本都支持在.NET 3.0

Jenkins入门系列之——01第一章 Jenkins是什么?

第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目. l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持. l 易于配置-所有配置都是通过其提供的web界面实现. l 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知. l 生成JUnit/TestNG测试报告. l 分布式构建支持Jenkins能

《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

书籍出处:https://www.packtpub.com/web-development/django-example原作者:Antonio Melé 2016年12月10日发布(没有进行校对,有很多错别字以及模糊不清的语句,请大家见谅) 2017年2月7日精校完成(断断续续的终于完成了第一章精校,感觉比直接翻译还要累,继续加油) 2017年2月10日再次进行精校(感谢大牛@kukoo的精校!) (译者注:本人目前在杭州某家互联网公司工作,岗位是测试研发,非常喜欢python,目前已经使用Dj

c++面向对象程序设计 谭浩强 第一章答案

c++面向对象程序设计 谭浩强 答案 第一章 第1章  C++?的初步知识 1.请根据你的了解,叙述C++?的特点.C++?对C有哪些发展? [解] 略. 2.一个C++的程序是由哪几部分构成的?其中的每一部分起什么作用? [解] 略. 3.从拿到一个任务到得到最终结果,一般要经过几个步骤? [解] 略. 4.请说明编辑.编译.连接的作用.在编译后得到的目标文件为什么不能直接运行? [解] 编译是以源程序文件为单位进行的,而一个完整的程序可能包含若干个程序文件,在分别对它们编译之后,得到若干个目

Java基础知识二次学习-- 第一章 java基础

基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一章  JAVA简介 时间:2017年4月24日10:23:32 章节:01章_02节 内容:jdk的配置与安装 完成情况:已经完成,cmd中javac提示出相关命令 时间:2017年4月24日10:30:39 章节:01章_04节 内容:输出HelloWorld 完成情况: 已经完成 javac先将

经典中的博弈:第一章 C++的Hello,World!

经典中的博弈:第一章 C++的Hello,World! 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! "程序设计要通过编写程序的实践来学习"-Brian Kernighan 1.1 程序 何为程序?简单的说,就是为了使计算机能够做事,你需要在繁琐的细节中告诉它怎么做.对于怎么做的描述就是程序.编程是书写和测试怎么做的过程.维基百科上说,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指

在Win7(64位)使用VS2015运行《OpenGL编程指南》第八版第一章程序的方法

前言:笔者第一次用vs2015来实现<OpenGL编程指南>第八版第一个程序时确实花费了不少时间,按照网上教程,尝试了各种方法,最终花费了两个上午加一个下午的时间, 成功运行了程序,花了这么多时间,确实让人懊恼,现在把运行程序的步骤记录下来,以便查阅. 1.第一步,下载oglpg-8th-edith. 如果去书本上的官网下载,下载的是第九版的,而不是第八版的源码. 去其他网站下载,下载的这个包里面没有第一章的源码,可以网上黏贴其他人的代码,建议下第八版源码,下载网址:链接:http://pan