不能从两个相同类型的源之一创建std::string

Cant create std::string from one of two sources with same types

本文关键字:std string 创建 同类型 两个 不能      更新时间:2023-10-16

为什么最后一行不行?

ostringstream stream;
int f = 12345;
stream << f;
string st = stream.str();
cout << typeid(st.rbegin()).name() << endl;
cout << typeid(stream.str().rbegin()).name() << endl;
cout << string(st.rbegin(), st.rend()) << std::endl;
cout << string(stream.str().rbegin(), stream.str().rend()) << endl;

ir说:"字符串迭代器不兼容",但类型相同。

调用ostringstream::str()方法将创建一个新的字符串对象,因此您将使用来自两个不同对象的迭代器。

要解决这个问题,将字符串存储在一个临时变量中:

string temp = stream.str();
cout << string(temp.rbegin(), temp.rend()) << endl;

这是你已经做的st变量

str按值返回字符串,这意味着stream.str()的两次调用不会在内存中引用相同的字符串。因此,它们的迭代器将不兼容。