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

发布于 2024-11-30 16:13:32 字数 427 浏览 0 评论 0原文

为什么最后一行不起作用?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彡翼 2024-12-07 16:13:32

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

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

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

这就是您已经对 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:

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

Which is what you were doing with the st variable already.

意犹 2024-12-07 16:13:32

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

str returns a string by value, which means the two invocations of stream.str() won't reference the same string in memory. And thus the iterators from them won't be compatible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文