2.2.2 include预编译指令和命名空间
我们所有的程序都以下面这两行代码开始:
- #include <iostream>
- using namespace std;
这两行使iostream库进入可用状态。cin和cout的定义就包含在这个库中。所以,假如程序使用了cin或cout,就应该在程序文件起始位置包含上述两行代码。
下面这一行代码称为include预编译指令。它将iostream库"包含"到程序中,使程序可以使用cin和cout:
- #include <iostream>
cin和cout在一个名为iostream的文件中定义,以上include指令相当于将那个文件复制到程序中。第二行代码比较复杂,三言两语很难说清。 C++(www.cppentry.com)使用命名空间组织名称。命名空间是很多名称(比如cin和cout)的集合。通过以下方式指定命名空间的语句称为using预编译指令: - using namespace std;
这个特定的using指令表明程序准备使用std(指standard)命名空间。这意味着你使用的名称具有std命名空间为其定义的含义。这儿的重点在于,cin和cout等名称在iostream中定义时,它们的定义指出它们在std命名空间中。所以,要使用cin和cout等名称,就要告诉编译器你准备"using namespace std;"。
对于命名空间并不需要了解太多(就目前而言),但简单地澄清一下,有助于解除你在使用命名空间时可能产生的一些困惑。C++(www.cppentry.com)之所以有命名空间,是因为有太多的东西需要命名。结果就是,可能有两个或者更多的项同名。换句话说,一个名称可能具有两个不同的定义。为消除歧义,C++(www.cppentry.com)将不同的项划分到不同的集合中,确保同一个集合(即同一个命名空间)中没有任何两个项同名。
注意,命名空间并不只是一个名称集合。它代表了一个C++(www.cppentry.com)代码主体,其中指定了某些名称的含义(比如一些定义和/或声明)。命名空间的作用是将所有C++(www.cppentry.com)名称规范划分成不同的集合(称为命名空间),使命名空间内的每个名称在那个命名空间中都只有一个"规范"(一个定义)。命名空间对名称进行划分,但和那些名称配合的还有大量C++(www.cppentry.com)代码。
可以使用两个命名空间中的两个同名元素吗?答案是肯定的,而且并不复杂,但那是本书后面要讲的一个主题。目前不需要这样做。
有的C++(www.cppentry.com)版本使用include预编译指令的一种古老形式(没有任何using namespace):
- #include <iostream.h>
使用以下语句时,如果程序无法编译或者不能运行:- #include <iostream>
- using namespace std;
请尝试将上述两行代码统一更换为如下形式:- #include <iostream.h>
但是,如果程序要求使用iostream.h(而不是iostream),则表明你使用的是老版本的C++(www.cppentry.com)编译器,应考虑升级。