gpt4 book ai didi

c++ - 用 str(const char*) 设置 std::stringstream 的内容会产生奇怪的后果

转载 作者:IT老高 更新时间:2023-10-28 22:04:14 26 4
gpt4 key购买 nike

我使用 std::stringstream广泛用于生成代码。在使用 str() 设置内容时,我遇到了一些奇怪的行为。函数,然后使用 operator<< .有人可以向我解释这种行为。非常感谢 - 谢谢。

示例一:

std::stringstream ssa;
ssa.str("Setting string");
std::cout << ssa.str() << std::endl;
ssa << " adding to string";
std::cout << ssa.str() << std::endl;

输出:

Setting string

adding to string

预期:

Setting string

Setting string adding to string

所以在阅读了一些文档之后,我发现我应该将打开模式设置为 ios_base::ate :

std::stringstream ssb(std::ios_base::ate);
ssb.str("Setting string");
std::cout << ssb.str() << std::endl;
ssb << " adding to string";
std::cout << ssb.str() << std::endl;

输出:

Setting string

Setting string

我希望再次(或现在):

Setting string

Setting string adding to string

为什么我会得到我现在的结果,我如何得到我想要的结果? E.i.能够设置初始stringstringstream并附加到 string ?

我知道我可以将内容设置为空 string("")然后只使用 <<operator .这实际上是我正在使用的解决方法。我只是不明白观察到的行为。而变通方法使我的代码更加困惑。

最佳答案

std::stringstream 对象的默认打开模式是 in |出。使用不同的模式会覆盖这些选项。由于无法写入流,因此无法使用插入运算符写入流。这就是 str() 两次给出相同输出的原因。

您还需要手动打开输出模式的流:

std::stringstream ssb("Setting string", std::ios_base::out | std::ios_base::ate);

Live Demo

或者,使用 std::ostringstream ,它用 out | 初始化内部 std::stringbuf 子对象。模式.

std::ostringstream("Setting string", std::ios_base::ate);

Live Demo

关于c++ - 用 str(const char*) 设置 std::stringstream 的内容会产生奇怪的后果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899464/

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