【发布时间】:2021-01-26 17:11:22
【问题描述】:
在测试中,我将给定值写入ostringstream。之后,我尝试评估是否写入了正确的值。但是,我写入流中的原始值似乎在稍后读取时发生了更改。
我将问题简化为以下代码:
#include <sstream>
#include <cassert>
#include <iostream>
int main()
{
std::ostringstream os;
uint16_t data{ 123 };
os.write(reinterpret_cast<const char*>(&data), sizeof(uint16_t));
uint16_t data_returned;
std::string data_str(os.str());
std::copy(data_str.begin(), data_str.end(), &data_returned);
assert(data == 123); // <- not true
assert(data_returned == 123);
}
这里的data 似乎被std::copy() 更改(为0)。
我也把代码放在godbolt上:https://godbolt.org/z/bcb4PE
更奇怪的是,如果我把uint16_t data{ 123 };改成const uint16_t data{ 123 };,一切都很好。
似乎我缺少对 std::copy() 机制的一些见解。
【问题讨论】:
标签: c++ ostringstream