gpt4 book ai didi

c++ - 标志 ios_base::app 的错误行为

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:37 25 4
gpt4 key购买 nike

据我所知,app 标志在每次写入前都会寻找结束 const ios_base::openmode std::ios_base::app [static] Seek to end before each write.

下面的程序输出是: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

Compiled code image

最佳答案

这是今年早些时候由 Josuttis 打开的开放缺陷 LWG #2121 。他的报告也以 GCC 和 Visual Studio 为例,引用:

Note the following program:

string s("s1: 123456789");
ostringstream s1(s, ios_base::out|ios_base::app);
s1 << "hello";
cout << s1.str() << endl;

With g++4.x it prints:

s1: 123456789hello

With VisualC++10 it prints:

hello23456789

请注意,标志 ios_base::ate 的行为并未在 C++03 中明确指定用于字符串流,但 C++11 added 详细说明了它的字符串流特定效果。它没有为 ios_base::app 添加这样的细节,所以一些编译器没有费心去实现它。

关于c++ - 标志 ios_base::app 的错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com