C++_基础6-名称空间
名称空间
背景:C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。例如许多厂商的类库,可能导致名称冲突。这种冲突被称为名称空间问题。
解决措施:C++标准提供了名称空间工具;以便更好地控制名称的作用域。
传统的C++名称空间
介绍一些术语,熟悉名称空间的概念
声明区域(declaration region),是可以在其中进行声明的区域。例如,可以在函数外面声明全局变量,对于这种变量,其声明区域为其声明所在的文件。对于在函数中声明的变量,其声明区域为其声明所在的代码块。
潜在作用域(potential scope),变量的潜在作用域从声明点开始,到其声明区域的结尾为止。因为变量必须先定义后使用。
作用域(scope),变量并非在其潜在作用域都是可见的,它可能被另一个嵌套声明区域中的声明的同名变量隐藏。变量对程序可见的范围被称为作用域。
新的名称空间特性
C++通过定义一种新的声明区域来创建命名的名称空间,提供一种声明名称的区域。
新的关键字namespace
举例:创建两个名称空间Jack和Jill
namespace Jack{
double pail;
void fetch();
int pal;
struct Well {…};
}
namespace Jill{
double fetch;
int pal;
struct Hill{…};
}
名称空间是开放的,即可以把名称加入到已有的名称空间中。
namespace Jill{
char * goose(const char *);
}
还有一种方法来访问给定名称空间中的名称,通过作用域解析运算符: :,使用名称空间来限定该名称:
Jack :: pail = 12.34;
Jill :: Hill = mole;
Jack :: fetch();
未被装饰的名称 称为未限定的名称;
包含名称空间的名称,被称为限定的名称;
1 using声明和using编译指令
如果我们不希望每次使用时都对它进行限定,因此C++提供了两种机制(using声明和using编译)来简化对名称空间中名称的使用。
using声明使特定的标识符可用
using编译指令使整个名称空间可用
using声明将特定的名称添加到它所属的声明区域中。例如,main()中的using声明Jill::fetch将fetch添加到main()定义的声明区域中。完成该声明后,便可以使用fetch代替Jill::fetch。using 编译指令将特定的名称空间中的名称添加到它所属的声明区域中。
using声明使一个名称可用,而using编译指令使所有的名称都可用。
using namespace Jack; 使得名称空间Jack中的所有名称都可用。
using namespace std; //使得std名称空间中的变量名在该函数中可用。
为了避免二义性,不允许同时使用两个using声明声明两个不同名称空间中的同名变量
using jack :: pal;
using jill :: pal;
2 using编译指令和using声明之比较
名称空间示例
名称空间及其前途
名称空间旨在简化大型编程项目的管理工作。
============================================
总结
- C++鼓励程序员在开发程序时使用多个文件,一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型;并将函数定义放在一个独立的源代码文件中。头文件和源文件一起定义和实现了用户定义的类型及其使用方式。最后,将main()和其他使用这些函数的函数放在第三个文件中。
- 名称空间允许定义一个可在其中声明标识符的命名区域。这样做的目的是减少名称冲突,尤其当程序非常大,并使用多个厂商的代码时。可以通过使用作用域解析运算符、using声明、using编译指令,来使名称空间中的标识符可见。
C++_基础6-名称空间的更多相关文章
- python基础——类名称空间与对象(实例)名称空间
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
- python基础:名称空间与作用域
Python的变量定义后都有自己的作用域,每个作用域内都有名字空间.名称空间就是变量名称与对象的关联关系.Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象.从 ...
- WPF 基础 - x 名称空间详解
名称 种类(默认Attribute) 备注 x:Array 标记拓展 可作为 ListBox.ItemsSource 的值 x:Class 指定与 .cs 中哪个类合并,所指示的类型在声明时使用 pa ...
- 网络虚拟化基础一:linux名称空间Namespaces
一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器
今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...
- Spring_day01--注入对象类型属性(重点)_P名称空间注入_注入复杂类型属性_IOC和DI区别_Spring整合web项目原理
注入对象类型属性(重点) Action要new一个service对象,Service中又要new一个Dao对象,现在把new的过程交给spring来操作 1 创建service类和dao类 (1)在s ...
- python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器
阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...
- python基础之函数参数,名称空间,以及函数嵌套
函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...
随机推荐
- LoadRunner Controller
1.Controller的引入 1)需要Controller的原因?需要多个用户来模拟并发的时候. 2)一种强大的.成熟的工具的体现. 2. Controller的启动方式 1)LoadRunner ...
- Python程序调试-TabError: inconsistent use of tabs and spaces in indentation
报错信息:TabError: inconsistent use of tabs and spaces in indentation 说明:代码缩进统一使用Tab键或空格键,不能混用. 解决办法: 1. ...
- Python代码注释
1.单行注释使用# # Code 2.多行注释,成对使用'''或""",三个单撇号或三个双引号 “”” Code “”” 3.多行快捷注释 1).增加注释 选中待注释的多 ...
- OpenCV的Rect矩形类用法
转自 http://blog.csdn.net/kh1445291129/article/details/51149849 //如果创建一个Rect对象rect(100, 50, 50, 100),那 ...
- _GNU_SOURCE宏
打开_GNU_SOURCE这个宏可以打开一些功能,比如为了在Linux系统上编译使用带有检测文件type的宏(S_ISxxxx): S_ISREG() //传入stat结构的st_mode,下同.是否 ...
- Django rest_framework----序列化组件
生成hypermedialink serializer.pclass BookModelSerializers(serializers.ModelSerializer): class Meta: mo ...
- Spark的job调优(1)
本文翻译之cloudera的博客,本系列有两篇,第二篇看心情了 概论 当我们理解了transformation,action和rdd后,我们就可以写一些基础的spark的应用了,但是如果需要对应用进行 ...
- SQL之DCL
DCL(Data Control Language)数据库控制语言 授权,角色控制等GRANT 授权REVOKE 取消授权 1)授权命令 grant,语法格式(SQL语句不区分大小写):Grant ...
- MongoDB整理笔记の性能监控
方法一:Mongostat 此工具可以快速查看某组运行中的mongodb实例的统计信息,用法如下: [root@localhost bin]# ./mongostat insert query upd ...
- 转 XlsReadWriteII 的博文(自留参考)
如何使用XlsReadWriteII在Delphi中读取Excel文件 XLSReadWriteII v5.20.01a for Delphi XE5 x32下载地址: http://download ...