字符串范围构造函数的 C++ 奇怪结果

C++ Strange Results of String Range Constructor

我有一些类似的代码:

std::istringstream iss{"SomeChars"};
// Some read ops here (though the problem stays even without them)
std::string reconst(iss.str().cbegin(), iss.str().cbegin() + iss.tellg());
std::cout << reconst << std::endl;

结果总是乱码。 Here 是一个演示这一点的程序。

当我将 iss.str() 存储在 std::string_viewstd::string 中时,该程序可以运行。但是,我还有一个问题:

问题:

str 函数returns 字符串按值。这意味着每次调用 str 都会为您提供一个新的字符串对象,并且您的迭代器指向这些临时字符串,而不是作为字符串流缓冲区的字符串。这行不通,因为迭代器需要指向同一个对象,而不是具有相同值的不同对象。