无法从具有相同类型的两个源之一创建 std::string
为什么最后一行不起作用?
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 说:“字符串迭代器不兼容”,但类型相同。
Why last line doesnt work?
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 says: "String iterators incompatible", but types the same.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
调用 ostringstream::str() 方法会创建一个新的字符串对象,因此您正在使用来自两个不同对象的迭代器。
要解决此问题,请将字符串存储在临时变量中:
这就是您已经对
st
变量所做的操作。Calling the
ostringstream::str()
method creates a new string object, therefore you're using iterators from two different objects.To solve the issue, store the string in a temporary variable:
Which is what you were doing with the
st
variable already.str
按值返回一个字符串,这意味着stream.str()
的两次调用不会引用内存中的同一字符串。因此它们的迭代器将不兼容。str
returns a string by value, which means the two invocations ofstream.str()
won't reference the same string in memory. And thus the iterators from them won't be compatible.