c++ - std::ostringstream 覆盖初始化字符串

标签 c++ string c++11 stl c++17

以下代码在 clang++-7 上生成“0004567”

#include <iostream>
#include <sstream>

using namespace std;

int main() {
    ostringstream oss{"1234567"};
    oss << "000";
    cout << oss.str() << endl;
}

现在这是正确的 STL 实现吗?

我想不出使用将被覆盖的字符串进行初始化有什么用...

最佳答案

@IgorTandetnik 为您提供了一个解决方案 - 添加 std::ios_base::app std::ostringstream 构造函数参数。

但是,将初始字符串(并且仅是一个字符串)传递到构造函数中没有任何好处。该参数仍然会被复制,类似于 oss << "1234567"; 所做的,但它需要提供一个额外的构造函数参数,这有引入编程错误的风险(在您的代码中也是如此)。

我建议保持简单:

ostringstream oss;
oss << "1234567";
oss << "000";
// alternatively, just do oss << "1234567000";

关于c++ - std::ostringstream 覆盖初始化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62238203/

相关文章:

c++ - 为什么 C++ 构造函数在继承中需要默认参数?

检查字符串是否改变

java - 将 html 字符替换为 ""(空白)并将样式应用于其中的文本

c++ - 我不明白这个链接错误

c++ - 将函数对象作为函数参数传递

c++ - G++ 在 Ubuntu 中找不到 <iostream.h>

c++ - 模板特化,Windows 与 gcc 上的不同行为?

c++ - 将 DirectX 接口(interface)转换为 IUnknown 指针

java - 螺旋形地画线

c++ - 在 C++ 中创建蛮力算法