当我写一个文件缓冲时,一切正常。 我想知道什么是标准输出的缓冲区。
#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";
}
答案 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";
在两种情况下,这都将抽象出如何实现实际缓冲区。仅关注更高级别的流接口本身。所使用的缓冲区只是实现细节。