【发布时间】:2021-12-28 14:25:31
【问题描述】:
例如,
std::string_view strv{ "Hello" };
strv.remove_prefix(1);
原始字符串应该是“Hello”。
我尝试使用 strv.data() 和 std::string str(strv.begin(), strv.end());
我只能得到“hello”而不是“Hello”。
【问题讨论】:
-
你删除了
strv.remove_prefix(1)的第一个字符(h),为什么你会期待“ello”以外的任何东西? -
data()成员返回指向视图第一个元素的指针,而不是原始字符串的第一个元素。迭代器也是如此。原因是视图就像在实际容器上打开的窗口,而不是容器本身。 -
strv.data() - 1?但它现在不在视野范围内...... -
有谁知道访问
strv.data() - 1是否是未定义的行为? -
@JohnFilleau 应该没问题,因为
data指向一个数组,指向data() - 1仍在同一个数组中的位置。 AFAIK 指针算术规则说没关系。
标签: c++ string string-view