标准输出缓冲区叫什么?

时间:2019-05-01 14:49:49

标签: c++

当我写一个文件缓冲时,一切正常。 我想知道什么是标准输出的缓冲区。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
  filebuf m;
  m.open("/home/patryk/untitled6/text.txt", ios::out);
  ostream out(&m);
  out<<"to ja";
}

我不想使用例如cout.rdbuf。 仅如上所述

输出流的名称

#include <iostream>
using namespace std;
int main()
{

  ostream out(cout.rdbuf());
  out<<"to ja";
}

2 个答案:

答案 0 :(得分:2)

这是从std::streambuf派生的实现定义的类型,这里是what a popular C++ reference says

  

全局对象std :: cout和std :: wcout控制输出到实现定义类型的流缓冲区(从std :: streambuf派生),并与标准C输出流stdout关联。

这意味着您只能使用std::cout实际上访问std::cout.rdbuf()中当前的实例-除非您的编译器供应商提供对其相关内部的非标准访问。

例如,GCC提供了stdio_filebuf,可以将其实例“包装”在标准输出文件描述符中。

答案 1 :(得分:1)

在两个示例中,都不需要照原样使用std::ostream

在第一个示例中,使用std::ofstream代替std::filebuf

ofstream out("/home/patryk/untitled6/text.txt");
out << "to ja";

在第二个示例中,std::cout已经是std::ostream,因此只需直接写:

cout << "to ja";

在两种情况下,这都将抽象出如何实现实际缓冲区。仅关注更高级别的流接口本身。所使用的缓冲区只是实现细节。