- 1
- 0
- 约3.38千字
- 约 20页
- 2017-06-03 发布于湖北
- 举报
第三章 命名空间 控制连接 (1)编译单元 (2)内部连接 (3)外部连接 编译单元 当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件 就是一个编译单元。这个编译单元会被编译成为一个与cpp文件名同名的目标文件(.o或是.obj)。连接程序把不同编译单元中产生的符号联系起 来,构成一个可执行程序。 内部连接 (1)内部连接:如果一个名称对于它的编译单元来说是局部的,并且在连接时不会与其它编译单元中的同样的名称相冲突,那么这个名称有内部连接(注:有时也将声明看作是无连接的,这里我们统一看成是内部连接的)。 内部连接 (2)以下情况有内部连接: 所有的声明。 名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义。 enum定义。 inline函数定义(包括自由函数如果一个函数是自由函数,那么这个函数不是类的成员函数,也不是友元函数。 和非自由函数)。 类的定义。 名字空间中const常量定义。 union的定义。 外部连接 (1)外部连接:在一 个多文件程序中,如果一个名称在连接时可以和其它编译单元交互,那么这个名称就有外部连接。 外部连接 (2)以下情况有外部连接: 类非inline函数总有外部连接。包括类成员函数和类静态成员函数。 类静态成员变量总有外部连接。 名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量。 内部连接与外部连接 注意:对于全局变量和函数,定义时如果指定是static,则是内部连接;指定extern,是外部连接。默认为extern。 命名空间的概念 C语言中的预处理、静态处理等会引起命名冲突。 命名空间(也叫名字空间、名称空间)是用来限定名称的解析和使用范围的,以解决命名冲突。 命名空间是一个逻辑上的类型组织系统,用它来对程序中的类型进行逻辑上的分组,并使定义在同一个命名空间中的类可利用命名空间直接相互调用。 标准的C++有命名空间机制,使用namespace关键字。库或程序中的每一个C++定义集被封装在一个命名空间中,如果其他的定义中有相同的名字,但它们在不同的命名空间,则不会产生命名冲突。 命名空间的定义 格式: namespace 命名空间名 { // 命名空间成员(其他命名空间或类的定义) } 说明: 命名空间只能在全局范围内定义。 “命名空间名”是C++合法的标识符,也可以是用作用域分解运算符(::)来构成的命名空间的完全限定名。可以没有命名空间名(无名的命名空间),其成员的名称不需要限定就可以使用。 不允许在定义命名空间时使用任何访问修饰符。系统默认命名空间具有public访问属性。但可以在一个命名空间的类定义中插入一个友元声明。 命名空间的定义 说明(续): 命名空间的成员可以是另一个命名空间(嵌套)或类型(类、结构、接口、枚举等)的定义。 一个命名空间可以在多个头文件中用一个标识符来定义,就好像重复定义一个类一样。 一个命名空间的名字可以用另一个名字来作它的别名,这样就不必敲打那些开发商提供的冗长的名字了。 不能像类那样去创建一个命名空间的实例。 可以在一个编译单元中包含一个未命名的命名空间,但只能包含一个未命名的命名空间。 在命名空间的结尾,右花括号的后面可以跟一个分号(;)。 见例Example_3_1 命名空间的使用 访问一个命名空间中的成员可以采用下面三种方法: 直接访问命名空间的成员(完全限定名):用作用域分解运算符(::)。见例Example_3_2。 缺点:输入繁琐。 使用声明:用using声明一次性引用名字。见例Example_3_3。 using 命名空间名::成员名; 缺点:缺乏类型信息,不能克服重载问题。 使用指令:用using指令把所有名字引入到命名空间中。见例Example_3_4。 using namespace 命名空间名; 缺点:可能会产生命名冲突。 命名空间的使用小结 无名的命名空间允许无限制地使用其成员,并且为其成员提供了内部连接。 如果不想由于引入不同命名空间而导致重复定义一个函数时,可以使用using声明,它不会引起任何二义性和重复。 对一个实现文件(.cpp文件):使用一个全局using指令是一个好方法。因为只有在该文件编译结束时,using指令才会起作用。 对于一个头文件(.h文件):最好使用明确的限定或者被限定在一定范围内的using指令和using声明,而不能把一个全局using指令引入到一个头文件中(因为那将意味着包含这个头文件的任何其他头文件也会打开这个命名空间)。 命名空间的别名 使用命名空间的完全限定名会觉得太繁琐,命名空间的别名能够解决这个问题。 格式: namespace
您可能关注的文档
最近下载
- 2026年春季教科版三年级科学下册教学计划及进度表(新版本).docx VIP
- 14.赵海林-北斗云高精度打桩导航定位的副本-20201012-2[1].pptx VIP
- (2026 春新版)二年级科学下册教学计划及进度表.docx VIP
- 重症患者的早期康复课件.pptx VIP
- 2022年新高考全国Ⅱ卷英语真题(原卷版).pdf VIP
- 2026春新版大象版科学三年级下册教学计划.pdf VIP
- 2024年江苏省中考地理试题卷(含答案解析).docx
- 小学数学六年级上册思维拓展精选练习题.docx VIP
- 北斗云 DZ502 打桩放线导航仪 快速操作安装手册说明书.pdf VIP
- 美国机械学会标准ASME B16.51-2013 Copper and Copper Alloy Press-Connect Pressure Fittings.pdf VIP
原创力文档

文档评论(0)