2.1.4 名称空间

    在代码2.1中,使用iostream头文件,应使用名称空间编译指令“using namespace std;”使得定义cout和cin对程序可见,这叫做using编译指令,这里,先对名称空间作出简要的说明,详细的介绍请参考第15章。

    在使用计算机软件厂商提供的源代码时,经常会遇到函数重名或变量重名的情况,编译器不知道该使用哪个版本,人为对函数和变量进行改名也不现实,为了解决这一问题,新的ANSI/ISO C++标准引入了名称空间这一特性。允许厂商将其产品封装在一个叫名称空间的单元中,使用名称空间来对函数和变量进行管理,编译器也因此可以决定使用哪个版本。如A公司和B公司提供的源代码中都有C()函数,并将各自的代码都定义在名称空间NamespaceA和NamespaceB中,使用下面的调用方式可以将两个版本无误地区分开。


    NamespaceA:C();//调用A公司提供的C函数 NamespaceB:C();//调用B公司提供的C函数

    C++标准库中提供的函数和变量都放置在名称空间std中,在iostream中定义的cin、cout和endl实际上是std:cin、std:cout和std:endl,在代码2.1中,使用了using编译指令(“using namespace std;”),使得std名称空间中的所有名称都可用,也就可以省略掉前缀“std:”。换言之,代码2.2与代码2.1是等价的。

    代码2.2 两数相乘的另一种写法AnotherMultiply2Number


    <———————————————-文件名:example202.cpp———————————-> 01 #include<iostream>//编译预处理 02 int main()//主函数 03 { 04 int num1=0,num2=0,resultNum=0; 05 std:cout<<"请输入要相乘的两个整数,用空格键分开:";//输出提示语句 06 std:cin>>num1>>num2;//接收用户输入 07 resultNum=num1*num2;//乘法运算 08 std:cout<<"计算结果为"<<resultNum;//输入计算结果 09 std:cout<<std:endl;//输出一个空行 10 return 0;//main()函数返回 11 }

    【代码解析】代码第5行就是调用名称空间“std”中的cout对象来输出提示。

    使用“using namespace std;”是个偷懒的办法,这使得std名称空间中所有的名称都可用,更好的办法是使用using声明语句,只让需要的名称可用。

    将“using namespace std;”用下列语句替换。


    using std:cin; using std:cout; using std:endl;

    便可以使用cin、cout和endl,而不用加“std:”前缀,不过要使用iostream中的其他名称,同样必须先进行声明。

    using声明语句既可以如代码2.1一样放在main()函数内部,这样,std名称空间中所有的名称只能在main()函数内使用,也可以放在main()函数外部,使其获得全局的可见性,这样,可以在文件中任何地方使用std名称空间中所有的名称。

    说明

    名称空间是C++一种新的特性,只针对新标准的C++头文件(即没有.h后缀,如#include<iostream>)才有效,对旧标准的头文件(如“#include<iostream.h>”),using语句没有意义。