C++ 无法从具有相同类型的两个源之一创建std::string

C++ 无法从具有相同类型的两个源之一创建std::string,c++,string,stl,iterator,C++,String,Stl,Iterator,为什么最后一行行不通 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(), s

为什么最后一行行不通

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;
ostringstream;
int f=12345;

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

要解决此问题,请将字符串存储在临时变量中:

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

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

要解决此问题,请将字符串存储在临时变量中:

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

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

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

当添加适当的头时,这在这里编译并运行良好,因此,也许您应该至少告诉我们完整的/真实的错误消息,以及您尝试使用的编译器。@Plasmah我认为这不是语法错误,只是一个发现代码中缺陷的好编译器,请参阅我的答案。当添加适当的标题时,这会在此处编译并运行良好,因此,也许您应该至少告诉我们完整/真实的错误消息,以及您尝试使用的编译器。@Plasmah我认为这不是语法错误,只是一个好的编译器发现了代码中的缺陷,请参阅我的答案。