首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有什么不同吗?

有什么不同吗?
EN

Stack Overflow用户
提问于 2012-02-13 19:46:40
回答 5查看 18.9K关注 0票数 21

正如书中所述(探索C++:程序员对C++的介绍):

istream报头声明输入运算符(>>),ostream声明输出运算符(<<)。

我可以在不添加#include <ostream>的情况下完美地运行代码

代码语言:javascript
运行
复制
#include <iostream>
using namespace std;
int main()
{
    cout << "hello world"<< endl;
    return 0;
}

但是,在书中的例子是:

代码语言:javascript
运行
复制
#include <iostream>
#include <ostream>    //why?
using namespace std;
int main()
{
    cout << "hello world"<< endl;
    return 0;
}

所以,iostreamostreamistream都是头文件,对吗?

如果没有必要使用ostream (iostream做工作),为什么作者在示例中包含?或者为什么ostream头文件仍然存在

Note:在Bruce的第一卷(2000年出版)中,没有关于ostreamistream的任何东西。只有一个头文件,即iostream

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-16 15:52:06

在那之后,我给Bjarne Stroustrup发了电子邮件,他就这样回答:

个人而言,我总是使用 iostream ,您永远不需要两者。 ostream 存在,这样人们就可以只包括所需的最小声明。

票数 4
EN

Stack Overflow用户

发布于 2012-02-13 19:48:45

正如ildjarn在评论中所指出的,2003年的C++标准指出,iostream不需要包含istream和ostream。所以,从理论上讲,这本书是正确的。

但是,大多数主要的编译器供应商已经将istream和ostream添加到iostream中,因此您的代码可以在您使用的编译器上工作。在其他编译器上,您可能没有这样的运气。

如果您想要编写仅符合2003标准(或更早版本)的旧编译器上编译的可移植代码,则应同时包含两个标头。OTOH,如果您是唯一一个编译您的代码,并拥有控制哪些编译器将被使用,它是安全的只使用iostream,因为这是向前兼容的。

票数 20
EN

Stack Overflow用户

发布于 2012-02-13 19:51:15

在C++11中,正如第27.4.1节中的标准所指出的那样,标头iostream本身包含istreamostream头,因此#include <ostream>是多余的。

上述部分中标准给出的iostream的“概要”是

代码语言:javascript
运行
复制
#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>

namespace std {
    extern istream cin;
    extern ostream cout;
    extern ostream cerr;
    extern ostream clog;

    extern wistream wcin;
    extern wostream wcout;
    extern wostream wcerr;
    extern wostream wclog;
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9266990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档