相同类型的对象cout,cerr,clog的表现如何不同?

时间:2012-11-29 01:13:48

标签: c++ iostream

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

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

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

2 个答案:

答案 0 :(得分:2)

这三个对象具有相同的类型,但它们不是同一个实例。 ostream的实例可以配置不同;在这种情况下,三个对象被配置为以其特定方式处理每个对象。这是有道理的:如果同一个类的所有对象都以完全相同的方式运行,那么就没有理由首先将它们作为单独的对象。

答案 1 :(得分:2)

constructor采用streambuf选项

explicit ostream (streambuf * sb);

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