【发布时间】:2021-10-27 10:20:32
【问题描述】:
可以从std::string 轻松创建std::string_view。但是如果我想使用std::string 的迭代器创建一个std::string 范围的字符串视图就不行了。
这是我尝试过的代码:https://gcc.godbolt.org/z/xrodd8PMq
#include <iostream>
#include <string>
#include <string_view>
#include <iterator>
int main()
{
std::string str{"My String"};
std::string_view strView{str}; // works
//std::string_view strSubView{str.begin(), str.begin() + 2}; // error
}
当然,也许我们可以从str 中提取出子字符串,然后使用strSubView 制作字符串视图,但需要创建额外的字符串。
我发现std::basic_string_view的第五个构造函数取了迭代器的范围。
template<class It, class End>
constexpr basic_string_view(It first, End last);
但它只是 std::string 的迭代器还是 std::basic_string_view 本身?如果不是 std::string 的迭代,为什么我们不应该有一个,毕竟字符串视图:
描述一个可以引用一个常量连续序列的对象 类似字符的对象!
取char的连续序列的范围,不应该算吗?
【问题讨论】:
-
该构造函数是在 C++20 中添加的。如果您使用 C++17 编译器进行编译,则它不存在。 It works if you target C++20
-
“我们可以从 str...
strSubView = strView.substr( 0, 2 );。这将与您正在尝试的内容相媲美。 -
@Caleth 哦,是的,这只是在我的眼皮底下,但我没有注意到 cppreference 中的语言标签。这意味着在 C++17 中没有办法做到这一点??
标签: c++ c++17 stdstring string-view