1.3 使用std名称空间
因为经常要用到std名称空间中的元素,在此介绍两种不同的可以直接使用这些元素的方法,这样就不必总是使用std::前缀。
1.3.1 Game Over 2.0程序简介
Game Over 2.0程序的运行结果和图1-2所示的原始Game Over程序一模一样,但是区别在于访问std名称空间中元素的方式。从Course Technology网站(www.courseptr.com/downloads)或本书合作网站(http://www.tupwk.com.cn/downpage)上可以下载到该程序的代码。程序位于Chapter 1文件夹中,文件名为game_over2.cpp。
// Game Over 2.0
// Demonstrates a using directive
#include <iostream>
using namespace std;
int main()
{
cout << "Game Over!" << endl;
return 0;
}
1.3.2 使用using指令
与Game Over程序一样,Game Over 2.0也以两行注释和用于输出的iostream头文件开始。但是接下来,我们看到了一行新的语句。
using namespace std;
using指令让我们直接获取std名称空间中元素的访问权。如果还是将名称空间比作区号,那么从上面语句开始,所有std名称空间中的元素就如同本地电话号码一样。也就是说,无须加上区号(std::前缀)就可以访问它们。
现在我们可以不加任何前缀就使用cout和endl。就目前而言,这似乎无足轻重。但如果要几十甚至上百次地引用这些对象,这就非常有用了。
1.3.3 Game Over 3.0程序简介
还有另外一种实现Game Over 2.0的方法:将文件配置成不必每次显式地使用std::前缀就可以访问cout和endl。这正是将要在Game Over 3.0程序中展示的方法,Game Over 3.0显示的文本和Game Over 2.0一模一样。从Course Technology网站(www.courseptr.com/downloads)或本书合作网站(http://www.tupwk.com.cn/downpage)上可以下载到该程序的代码。程序位于Chapter 1文件夹中,文件名为game_over3.cpp。
// Game Over 3.0
// Demonstrates using declarations
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Game Over!" << endl;
return 0;
}
1.3.4 使用using声明
3.0版本的Game Over程序使用了两个using声明。
using std::cout;
using std::endl;
通过明确声明希望std名称空间中的哪些元素对程序本地化,可以像程序Game Over 2.0一样直接访问它们。虽然这样做与使用using指令比起来输入量要更多一些,但优势在于清晰地指明了计划使用的名称空间中的元素。另外,这不会将无意使用的元素本地化。