一、什么是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 命名空间的更多相关文章

  1. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()

    系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...

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

    第 1 章    欢迎来到工作流的世界 …思想如蝴蝶般飞到我身边 —— Gossard / Vedder (译注:Gossard与Vedder是来自Pearl Jam乐队的2名乐手,该句出自他们的歌曲 ...

  3. 第一章01:熟悉java,发展历史

    1. java由来: 原公司,sun,后来被oracle\甲骨文公司收购 java,主要用于开发互联网软件,例如:QQ.迅雷.淘宝.京东

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

    1.2.3  Windows Workflow运行时 从Windows Workflow的角度看,可以将工作流活动当成是交给一个工作流处理器去执行的一系列指令或操作码.在Windows Workflo ...

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

    1.2.2.Visual Studio 2005扩展包 微软也为Windows Workflow开发者提供了Visual Studio 2005扩展包.扩展包将许多功能集成到Visual Studio ...

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

    1.3      开发我们的第一个工作流 也许你曾经在这样的产品经理手下搞过开发:他总是在你身边转悠,并不时的问一句“你还没做完吗?”.在这一部分,我们将用一个简单的Windows Workflow程 ...

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

    1.2      Windows Workflow概览 微软的Windows Workflow Foundation(简称WF)是.NET框架3.0版的一部分..NET3.0其它主要部分是Window ...

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

    第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目. l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安 ...

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

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

随机推荐

  1. Entity Framework Code First级联删除

    如果我们要到一对主从表增加级联删除,则要在主表中的引用属性上增加Required关键字,如: public class Destination { public int DestinationId { ...

  2. java实现多继承

    方法:  接口+组合 理由:通过接口实现客户端的使用时多继承类的多类, 通过组合实现客户端内部类的实现相关功能(而且有些共用的功能可以不总是多次实现). public interface GMapOb ...

  3. Proguard使用教程

    一.概念 ProGuard是一款免费的Java类文件压缩器.优化器和混淆器.它能发现并删除无用类.字段(field).方法和属性值(attribute).它也能优化字节码并删除无用的指令.最后,它使用 ...

  4. 018如何建立自动化框架 how to bulid the framwork

    本讲包括: 一. objective 二. How to bulid 三. Keyview of frawork (关键视图) 四. conclusion automation framwork:自动 ...

  5. 优分享VR开源啦,优分享VR是基于Google VR开发的一款手机VR视频资源的聚合软件

    欢迎来到优分享VR开源项目 优分享VR 开源中国Git地址: http://git.oschina.net/xumingwang/youkes_vr 优分享VR是 优分享安卓APP VR视频播放开源部 ...

  6. htmlcss笔记--a

    a标签 1.下载:href里面放一个文件或者压缩包时,会下载: 2.锚点:跳转到锚点: href="#id" 跳转到的模块添加一个id,点击id就会跳转到该模块. html标签: ...

  7. Python几个算法实现

    1.平衡点问题: 比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点:假如一个数组中的元素,其前面的部分等 ...

  8. jquery chart plugin

    jquery flot http://www.jqueryflottutorial.com/ jquery jqplot http://www.jqplot.com/ highcharts中文网 : ...

  9. WEB开发总结(持续更新。。。)

    近期开始搞搞web的东西,觉得有必要把遇到的问题总结一下,就在这里当做个笔记本吧. 1.用maven建立的web工程,在运行的时候,右键找不到“Run on server”菜单: 可以在命令提示行中, ...

  10. jqgrid 中设置列不排序

    背景 今天在做系统的功能时,当时有这么个需求:在添加了一行数据时,原本的排序的自动就不能再排序,也就是排序失效. 1. 使用onSortCol事件禁止排序列 当时使用了初始化时,使用onSortCol ...