2
extern ostream cout;
extern ostream cerr;
extern ostream clog;

cout、cerr 和 clog 被声明为 ostream 的类型。但是 cout 和 clog 有缓冲区,而 cerr 没有。

为什么相同类型的对象表现不同?

4

2 回答 2

2

这三个对象具有相同的类型,但它们不是同一个实例。的实例ostream可以配置不同;在这种情况下,这三个对象被配置为以特定方式处理每个对象的缓冲。这是有道理的:如果同一类的所有对象都以完全相同的方式表现,那么一开始就没有理由将它们分开。

于 2012-11-29T01:16:54.953 回答
2

构造函数接受一个streambuf选项

explicit ostream (streambuf * sb);

我猜他们每个人都使用不同的streambuf输出,这些streambuf对象控制输出的缓冲(或不缓冲)。

于 2012-11-29T01:17:11.307 回答