标志 ios_base::app 的错误行为
Wrong behavior with flag ios_base::app
据我所知,app
在每次写入之前都寻求最后的标志 常量 ios_base::OpenMode std::ios_base::应用 [静态] 寻求在每次写入之前结束。
以下程序输出为:recostream789
std::string str("t2: 123456789");
std::ostringstream ostr(str,std::ios_base::out|std::ios_base::app);
ostr << "recostream";
std::cout << ostr.str() << std::endl;
它不应该输出:t2: 123456789recostream
代替吗?
我正在使用 vs2010
编译的代码图像
这是开放缺陷LWG #2121,由Josuttis今年早些时候开放。他的报告也使用GCC和Visual Studio作为例子,引用:
请注意以下程序:
string s("s1: 123456789");
ostringstream s1(s, ios_base::out|ios_base::app);
s1 << "hello";
cout << s1.str() << endl;
使用 g++4.x 它可以打印:
s1: 123456789hello
使用 VisualC++10,它可以打印:
hello23456789
请注意,在 C++03 中没有为字符串流显式指定标志ios_base::ate
的行为,但 C++11 为其添加了详细的特定于字符串流的效果。它没有为ios_base::app
添加这样的细节,所以一些编译器没有费心去实现它。
是的,我认为它应该 - 至少对我来说,这看起来像一个编译器(或者,技术上,库)错误。
做一个快速检查,g++ (4.7.1) 似乎同意 - 它按预期生成t2: 123456789recostream
。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 终端错误MacOS:/Applications/Xcode.app/Content/Developer/Toolchai
- g++:错误:/u01/app/orace/product/11.2.0/xe/lib/lclasses12.zip:此
- javah:错误:无法访问android.support.v7.app.AppCompatActivity
- XCode -Mac App -Bootstrap启动时检查错误
- 标志 ios_base::app 的错误行为
- Mac OSX上的Qt App中的完全随机malloc错误
- 错误 C2664:'App *const' 'QWidget *'