为什么我们不能创建自己的ostream对象

use*_*138 10 c++ iostream class object

如果cout是ostream类的对象,那么为什么我们不能声明我们自己的对象,比如说来自同一个类的'out'.即,不是以下代码应该工作?

#include<iostream>
using namespace std;
int main()
{
    ostream out;
    out<<"something";
}
Run Code Online (Sandbox Code Playgroud)

或者其他

#include<iostream>
using namespace std;
int main()
{
    ostream_withassign out;
    out<<"something";
}
Run Code Online (Sandbox Code Playgroud)

0x4*_*2D2 6

流对象需要缓冲区才能将数据发送到外部设备.标准输出流对象,std::cout使用缓冲区初始化,封装传输到输出出现的位置.这是一个人为的例子:

std::ostream cout(/* buffer */);
Run Code Online (Sandbox Code Playgroud)

要使自己的流对象伪装成标准流对象,您只需将缓冲区传递std::cout给其构造函数即可.请注意,我不建议在实践中这样做:

std::ostream copy(std::cout.rdbuf()); // Note: not a *real* copy

copy << "Hello World";
Run Code Online (Sandbox Code Playgroud)


clo*_*ose 2

你没有设置ostream对象(这个流输出到什么),当然不能使用它。 http://www.cplusplus.com/reference/iostream/ostream/ostream/

// ostream constructor
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  filebuf fb;
  fb.open ("test.txt",ios::out);
  ostream os(&fb);
  os << "Test sentence\n";
  fb.close();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)