【问题标题】:Is this a difference between iostream.h and iostream这是 iostream.h 和 iostream 之间的区别吗
【发布时间】:2015-01-14 14:48:34
【问题描述】:

我知道以前有人问过有关<header><header.h> 之间区别的问题。在阅读了这些答案后,我列出了以下差异

  • 当然iostream.h 已被弃用,较新的符合标准的编译器不支持它
  • iostream.h 不包含 std 命名空间内的所有内容,也不使用模板。

好的。

但是,在阅读了几本书和一些答案(如this)之后,我推断#include<iostream.h> 在我们的程序中包含一个名为iostream.h 的特定文件,而@987654328 @ 甚至根本不需要映射到文件。它只是保证属于iostream 库的所有内容都包含在我们的程序中。我说的对吗?

【问题讨论】:

  • 正确实现 C++ 标准的 16 岁 C++ 编译器并不“更新”。你需要找到更好的书。
  • @HansPassant 请不要这么说。你知道我的意思。无论如何,我们甚至不需要使用iostream.h。但不幸的是,我有一个糟糕的老师,他被困在 1990 年代,他一直在不断地提出这样的事情。
  • 我现在还不是很确定,所以我写这个作为评论:似乎没问题。我可以想象一个编译器将所有标准库保存在巨大的 ZIP 文件中并在那里查找。我真的怀疑它会因为这样的事情而被标记为违反标准。
  • 啊,还有一件事:你的语法错误:“包含特定文件(来自'项目')”是#include "fooofile",“包含知名库”是#include <foofile>
  • @quetzalcoatl 哦,谢谢。这是一个很好的观点。

标签: c++ syntax include language-lawyer


【解决方案1】:

文件不需要“系统”标头。因此使用<> 指定包含:

C++11 16.2 [cpp.include]/2:在实现定义的位置序列中搜索由 分隔符之间的指定序列唯一标识的标头,并导致该指令被整个替换标头的内容。如何指定位置或标识的标头是实现定义的。

因此,如果实现者认为这是一个好主意,则可以在不加载和预处理文本文件的情况下使实现已知的标头中的声明(可能包括也可能不包括当前和/或过时的标准库标头)可用.

包含"" 将首先搜索文件(在实现定义的位置),如果失败则回退到<>

【讨论】:

  • 感谢您的回答。 +1 :) 好吧,您的意思是即使包含iostream.h 也不一定意味着我的程序中包含一个名为 iostream.h 的文件?
  • @ThePeacefulCoder:确实,<> 中包含的任何内容都不需要在文件中,只要编译器有其他方式来提供其声明即可。
  • 好的。我知道了。然后,除了前两个区别(我入伍的那些)之外,
    之间绝对没有区别。不是吗?
  • 我想知道是否有任何实现提供了一种从网络上提取文件的方法。喜欢-Ihttp://abcd.com/g++/include
  • @ThePeacefulCoder:就标准而言不是。任何特定的编译器都可能对它们进行不同的处理,具体取决于其实现定义的查找标头的规则。
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2018-12-29
  • 2012-04-20
  • 2012-02-16
  • 2011-02-01
  • 2014-01-26
相关资源
最近更新 更多