用其他名字来命名数组(3)

 

using 声明using declaration 提供了选择更为精细的名字可视性机制。它允许使名字中

间中的单个声明可见。例如

#include "IBM_Canada_Laboratory.h"

// 只让Matrix 可见

using IBM_Canada_Laboratory::Matrix;

int main()

{

// ok: IBM_Canada_Laboratory::Matrix

Matrix mat(4,4);

// error: IBM_Canada_Laboratory::Array not visible

Array<int> ia( 1024 );

// ...

}

为了防止标准C++库的组件污染用户程序的全局名字空间,所有标准C++库的组件都声

明在一个被称为std 的名字空间内。正如在第1 章中提到的,即使我们在程序文本文件中包

含了C++库头文件头文件中声明的组件,在我们的文本文件中也不是自动可见的。例如,在

标准C++中下面的代码实例就不能正常编译

 

#include <string>

// 错误string 不是可见的

string current_chapter = "A Tour of C++";

在<string>头文件中的所有声明都包含在名字空间std 中,正如第1 章所提到的,我们可

以用“在#include 预处理器指示符后面加上using 指示符”的办法,使C++头文件<string>中

的在名字空间std 中声明的组件对于我们的程序都是可见的。

#include <string>

using namespace std;

// ok: string 是可见的

string current_chapter = "A Tour of C++";

为了使在名字空间std 中声明的名字在我们的程序中可见,指示符using 通常被看作是一

种比较差的选择方案。在上面的例子中,指示符using 使头文件<string>中声明的并且位于

 

名字空间std 中的所有组件,在程序文本文件中都是可见的.这又将全局名字空间污染问题带

回来了,而这个问题正是std 名字空间首先要努力避免的,它增加了C++标准库组件的名字

与我们程序中声明的全局名字冲突的机会。

现在我们对名字空间机制已经有了一些了解,知道有另外两种机制可代替指示符

using,使我们能够引用到隐藏在名字空间std 中的名字string,我们可以使用限定的名字例

#include <string>

// ok: 使用限定的名字

std::string current_chapter = "A Tour of C++";

或如下使用using 声明

#include <string>

using std::string;

// ok: 上面的using 声明使string 可见

string current_chapter = "A Tour of C++";

为了使用名字空间中声明的名字,建议使用带有精细选择功能的using 声明代替using 指

示符,这也正是本书的代码示例中没有出现using 指示符的另一个原因。理想情况下,每一

个代码示例对它所用到的每个库组件都应该有一个using 声明。为了限制例子代码的长度,

也因为本书的许多例子是在不支持名字空间的情况下被编译的,所以using 声明就没有显示

出来。8.6 节将进一步讨论怎样对标准C++库的组件使用using 声明。

在接下来的四章中,我们将讲述另外四个类的设计,第3 章讲的是String 字符串类

的设计与实现,第4 章介绍整数Stack 栈类的设计,第5 章是List 列表类,第6 章对

第4 章定义的Stack 栈类进行重新设计,名字空间机制允许我们把每个类放在单独的头文

件中,但是仍然能把它们的名字封装到单个Cplusplus_Primer_3E 名字空间中。在第8 章中

我们将讨论这项技术,并对名字空间作更多的介绍。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值