相同类型的对象如何执行不同的操作

How the same type of objects cout, cerr, clog perform differently?

本文关键字:执行 操作 同类型 对象 何执行      更新时间:2023-10-16
extern ostream cout;
extern ostream cerr;
extern ostream clog;

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

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

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

构造函数采用streambuf选项

explicit ostream (streambuf * sb);

我猜它们中的每一个都使用不同的streambuf输出,这些streambuf对象控制输出的缓冲方式(或不缓冲)。