C++ std::ostringstream的默认打开标志

C++ std::ostringstream的默认打开标志,c++,C++,为什么std::ostringstream::ate不是ostringstream的默认打开标志的一部分 #include <sstream> #include <iostream> int main() { std::ostringstream oss; oss.str("set some string in the stream"); std::cout << oss.str() << std::endl; oss <&

为什么
std::ostringstream::ate
不是ostringstream的默认打开标志的一部分

#include <sstream>
#include <iostream>

int main()
{
  std::ostringstream oss;
  oss.str("set some string in the stream");
  std::cout << oss.str() << std::endl;
  oss << "expected a concatenation, but without std::ostringstream::ate flag, the writepos is at 0 after str(\"something\")";
  std::cout << oss.str() << std::endl;
  return 0;
}
#包括
#包括
int main()
{
std::ostringstream oss;
str(“在流中设置一些字符串”);

std::cout
str
不用于插入ostringstream;如果您确实想知道str是什么(const string&s),您可以在创建
oss
时设置
ate
如果不是为了设置字符串,那么是为了这个目的吗?我知道我可以在构造函数中添加ate。但是,我正在试图找到一个原因,为什么我不希望该标志作为默认标志。对我来说,没有该标志的行为是不可预料的。
str()
主要用于输入stringstreams,或作为将输出stringstream重置为空白的过程的一部分。如果以正常方式使用stringstream,则不会出现差异。但我可以想象有人想要倒带流并修改缓冲区的当前状态。这可能都是真的(我不认为这违反了“正常”用法),我理解istringstream的必要性,但它确实有自己的openflags。这两个类都可以正常运行,对吗?基本上这仍然不能回答我的问题:这是一个意外(错误/不幸)的默认,还是有原因的。