与LSGO一起学“第2章 做一个简短的C++程序(2.4 iostream与iostream.h的区别)”

2.4 iostream与iostream.h的区别

我们上节课了解了std::的作用,也知道如何省略std::的方法,同时我们也产生了一个疑问,那就是iostream与iostream.h究竟有什么区别呢?

 

iostream.h为非标准的输入输出流,这个.h的头文件是C语言格式的,由于当时还没有命名空间这个说法,所以也就不存在std这个命名空间标识符。自然用iostream.h也就用不着std或者using namespace std了。

 

iostream为标准输入输出流,它是C++规范的带命名空间的头文件,它包含在std命名空间内。而iostream流里又包含cin和cout输入输出对象,所以使用cout的时候必须加std。

 

通过刚才的比较我们了解到iostream是C++的头文件,而iostream.h是C语言格式的头文件,由于C++格式的iostream是规范的带有命名空间的头文件,所以在使用iostream标准库中的cout对象时要加上命名空间标识符std,而C格式的非标准的输入输出流iostream.h则不用。

 

也就是说从C++开始方才真正引入了命名空间这个新概念,那么命名空间的作用究竟是什么呢?

 

C++里引入命名空间(namespace)的目的是为了避免和减少命名冲突。一旦一个程序写大了,就很难避免重名,特别是多人合作的情况下。过去C中的解决方法只有靠人为的注意,并且加长名字,以避免重名。这样做会使得一些名字看上去没有意义或者难以理解,而程序员在写程序的时候,也受这个问题的限制,不能自由地命名自己使用的变量或者函数。而有了命名空间(namespance)就不存在这些问题了,这就是C++引入namespace这个概念的好处。

 

举一个形象的例子:

有两个学生,一个叫小王,一个叫小李,他们都各自拥有一本相同的语文书,为了区分这两本书,他们就要在书的封皮上写上自己的名字——小王或者小李。同理你要调用cout对象时也要在前边写上cout所属的命名空间“std::”而在代码里加“using namespace std”就可以不用再加“std::”。但是最好的方法就是不用“using namespace std”,而用using std::cout,这样可以避免命名重复,因为不同的名字在不同的命名空间里,我们将它们都释放出来,很可能不小心使用了错误库函数中的对象。关于这一点,我们下节再详细讲述。

你可能感兴趣的:(C++)