【发布时间】:2012-11-17 00:32:17
【问题描述】:
extern ostream cout;
extern ostream cerr;
extern ostream clog;
cout、cerr 和 clog 被声明为 ostream 的类型。但是 cout 和 clog 有缓冲区,而 cerr 没有。
为什么相同类型的对象会有不同的行为?
【问题讨论】:
extern ostream cout;
extern ostream cerr;
extern ostream clog;
cout、cerr 和 clog 被声明为 ostream 的类型。但是 cout 和 clog 有缓冲区,而 cerr 没有。
为什么相同类型的对象会有不同的行为?
【问题讨论】:
这三个对象具有相同的类型,但它们不是同一个实例。 ostream 的实例可以进行不同的配置;在这种情况下,这三个对象被配置为以特定方式处理每个对象的缓冲。这是有道理的:如果同一类的所有对象的行为方式完全相同,那么首先就没有理由将它们分开。
【讨论】:
constructor 采用 streambuf 选项
explicit ostream (streambuf * sb);
我猜他们每个人都使用不同的streambuf 输出,而那些streambuf 对象控制输出如何缓冲(或不缓冲)。
【讨论】: