38.6 缓冲

从概念上看,输出流将字符放入一个缓冲区。随后某刻,字符被写入(“刷到”)其目的地。这种缓冲区被称为streambuf,它定义在<streambuf>中。不同类型的streambuf实现不同类型的缓冲策略。通常,streambuf将字符保存在一个数组中,直至发生溢出,才被迫将字符写到其真正的目的地。因此,我们可图示ostream如下:

ostream的模板实参集必须与其streambuf的模板实参集相同,这些参数决定了字符缓冲区中的字符的类型。

istream的图示与之类似,只是字符流向另一个方向。

在无缓冲I/O这种简单I/O中,streambuf直接传输每个字符,而不是保留它们直至能高效传输为止。

缓冲机制的关键类是basic_streambuf:

照例,标准库提供了一组(一般认为)最常用的别名:

basic_streambuf提供了很多操作。很多public操作只是简单地调用一个protected虚函数,确保来自派生类的函数对特定种类的缓冲恰当地实现此操作:

Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.