【发布时间】:2013-08-04 13:52:09
【问题描述】:
为什么我不能像这样为我的输出创建一个“空”流
std::ostream out;
?
对于clang 3.4 和gcc 4.8.1 在Linux 下使用libstdc++,这些行显然是非法的,我真的不明白为什么,我的意思是为什么我不能随便创建一个流并像这样使用它我想要 ?请注意,std::ofstream out; 是 100% 可以的。我只是不明白这背后的逻辑。
如果您认为在创建之后我可以使用此缓冲区并与 copyfmt 的其他缓冲区共享一个公共缓冲区,那就更奇怪了,所以我的 std::ostream 没有真正需要从创建开始就被初始化为正确的东西有用的对象。
请不要偏离这一点,我不需要stringstreams,我需要ios 流,因为我必须做的事情以及它们提供的方法和属性。
【问题讨论】:
-
你希望
ostream做什么? -
@Rapptz 的行为类似于
std::cout或std::cerr?就像输出流一样? -
我认为他的意思是“输出到哪里”。 BTW - cout 和 cerr 输出到不同的位置。它们恰好是默认打印到屏幕上的位置
-
@cluracan 这个位置是什么?我只是不在乎位置,我需要一个通用输出流
-
cerr 打印到“标准错误流”。该流可以被截获并移动到例如日志文件(即使在编译之后 - 您可以在运行程序时执行此操作)。 cout 打印到“标准输出流”。这也可以被截获并移动到文件中,或者作为另一个程序的输入等。如果要写入标准输出,请使用 cout。如果要写入标准错误流,请使用 cerr。如果你想在其他地方写,你首先需要确定“其他地方”在哪里。 tl;dr - 使用 cout。