C++ 名称空间

根据阅读资料编写此文章,一是个人方便多次阅读加深理解,二是希望能帮助他人学习。其中如有描述不当之处可随时在评论区评论,谢谢。

名称空间简述

名字空间(英语:Namespace),也称命名空间、名称空间等,它表示着一个标识符(identifier)的可见范围。一个标识符可在多个名字空间中定义,它在不同名字空间中的含义是互不相干的。这样,在一个新的名字空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名字空间中。

例如,设Bill是X公司的员工,工号为123,而John是Y公司的员工,工号也是123。由于两人在不同的公司工作,可以使用相同的工号来标识而不会造成混乱,这里每个公司就表示一个独立的名字空间。如果两人在同一家公司工作,其工号就不能相同了,否则在支付工资时便会发生混乱。

这一特点是使用名字空间的主要理由。在大型的计算机程序或文档中,往往会出现数百或数千个标识符。名字空间提供一隐藏区域标识符的机制。通过将逻辑上相关的标识符组织成相应的名字空间,可使整个系统更加模块化。

在编程语言中,名字空间是对作用域的一种特殊的抽象,它包含了处于该作用域内的标识符,且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。许多现代编程语言都支持名字空间。在一些编程语言(例如C++和Python)中,名字空间本身的标识符也属于一个外层的名字空间,也即名字空间可以嵌套,构成一个名字空间树,树根则是无名的全局名字空间。

函数和类的作用域可被视作隐式名字空间,它们和可见性、可访问性和对象生命周期不可分割的联系在一起。

一、传统C++名称空间

1.1 名称空间部分概念简述

声明区域: 声明区域是可以在其中进行声明的区域。例如,可以在函数外面声明全局变量,对于这种变量,其声明区域为其声明所在的文件;对于在函数中声明的变量,其声明区域为其声明所在的代码块。

潜在作用域: 变量的潜在作用域从声明点开始,到其声明区域的结尾。因此潜在作用域比声明区域范围小,这是由于变量必须定以后才能使用。

作用域: 变量对程序而言可见的范围被称为作用域。

注: 变量并非在其潜在作用域内的任何位置都是可见的。
例如,它可能被另一个在嵌套声明区域中声明的同名变量隐藏。
再举例,再函数中声明的局部变量(对于这种变量,声明区域为整个函数),它将隐藏在同一个文件中声明的全局变量(对于这种变量,声明区域为整个文件)。

二、名称空间新特性

2.1 新特性说明

(1)C++ 通过定义一种新的声明区域来创建命名的名称空间,目的在于提供一个声明名称的区域。一个名称空间中的声明的名称不会与另外一个名称空间中的相同名称发生冲突。

(2)名称空间可以使全局的,也可以位于另一个名称空间中,但不能位于代码块中。因此,在默认情况下,在名称空间中声明的名称的链接性是外部的(除非引用了常量,常量默认链接性是内部的)

(3)名称空间创建格式:

namespace typename
{
	// 需要做的工作
	...
}

(4)除了用户定义的名称空间外,还存在另一个名称空间----全局名称空间。它对应于文件级声明区域

2.2 名称空间简单使用说明

(1)访问名称空间中名称的方法:
使用作用域解析运算符,来访问名称空间中名称,作用域解析运算符如下:

::

举例说明:

namespace A
{
	double pail;
	void fetch();
}

namespace B
{
	int pal;
	struct Hill 
	{	
		// 结构体数据
		...
	}
}

// 使用如下
A::pail = 12.34;
B::Hill mole;
A::fetch();

(2)未限定名称与限定名称
未限定名称: 直接使用名称,未在名称前面添加名称空间与作用域运算符,如pail
限定名称: 包含名称空间的名称,如A::Pail

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值