extern ostream cout;
extern ostream cerr;
extern ostream clog;
cout、cerr 和 clog 被声明为 ostream 的类型。但是 cout 和 clog 有缓冲区,而 cerr 没有。
为什么相同类型的对象表现不同?
这三个对象具有相同的类型,但它们不是同一个实例。的实例ostream
可以配置不同;在这种情况下,这三个对象被配置为以特定方式处理每个对象的缓冲。这是有道理的:如果同一类的所有对象都以完全相同的方式表现,那么一开始就没有理由将它们分开。
构造函数接受一个streambuf
选项
explicit ostream (streambuf * sb);
我猜他们每个人都使用不同的streambuf
输出,这些streambuf
对象控制输出的缓冲(或不缓冲)。