第一章 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é (译者注:本人目前在杭州某家互联网公司工作, ...
随机推荐
- Hibernate之QBC检索和本地SQL检索
QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 本地SQL查询来完善HQL ...
- C# 中的装箱与拆箱
转角撞倒猪 原文 C# 中的装箱与拆箱 装箱:将一个数据项(副本)从栈中自动复制到堆中的行为. int i = 8; object o = i; // 装箱 // 首先在堆中开辟出一片区域,再将 ...
- 《Python基础教程(第二版)》学习笔记 -> 第三章 使用字符串
本章讲话介绍如何使用字符串格式化其他的值,并简单了解一下利用字符串的分割.联接.搜索等方法能做些什么. 基本字符串操作 所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最大最小值)对字符 ...
- win7安装gevent时报错 whl is not a supported wheel on this platform.
1.首先强烈推荐一个站点 在使用pip安装python协程包gevent时,需要很多依赖,很多需要编译的底层支持等等,不能拿来就用.总之很多麻烦的事儿. 这个强烈推荐一个站点,里面都是一些编译好的py ...
- PHP生成各种验证码和Ajax验证
网址:http://www.helloweba.com/view-blog-191.html 源码下载地址: http://files.cnblogs.com/h07061108/php%E9%AA% ...
- HW6.14
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- 32位Ubuntu12.04搭建Hadoop2.5.1完全分布式环境
准备工作 1.准备安装环境: 4台PC,均安装32位Ubuntu12.04操作系统,统一用户名和密码 交换机1台 网线5根,4根分别用于PC与交换机相连,1根网线连接交换机和实验室网口 2.使用ifc ...
- 【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法
Stage3D在运行中是存在随时会丢失上下文的尴尬情况. 渲染内容丢失的问题本身就说明是因为丢失了Context3D对象.出现此问题的原因很多,通常还不是因为Stage3D应用.比如在win7系统中, ...
- MySql实现远程连接
MySql实现远程连接 1.进入mysql,创建一个新用户root,密码为root: 格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密 ...
- hadoop 2.0 详细配置教程
http://www.cnblogs.com/scotoma/archive/2012/09/18/2689902.html