CPP学习之——iostream与iostream.h的区别(2.4)

一 前言

早期的C++有iostream.h函数库,也可以用来执行std::cout。那么我们产生一个疑问:那就是iostream与iostream.h究竟有什么区别呢?

二 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++开始方才引入了名字空间这个新概念,那么名字空间的作用究竟是什么呢?

4.1 引入名字空间的意义

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

4.2 举例

举个形象的例子:

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