我正在阅读 documentation for std::string_view
,我注意到这些是构造函数:
constexpr basic_string_view() noexcept;
constexpr basic_string_view(const basic_string_view& other) noexcept = default;
constexpr basic_string_view(const CharT* s, size_type count);
constexpr basic_string_view(const CharT* s);
他们为什么不介绍这个?
template<std::size_t n>
constexpr basic_string_view(const CharT(&s)[n]) : basic_string_view(s, n) {}
在大多数情况下,它会保存对 strlen()
的调用。有什么原因没有引入它吗?
最佳答案
原因是它在功能上不等价
char x[255];
sprintf(x, "hello folks");
// oops, sv.size() == 255!
std::string_view sv(x);
strlen
不是问题,因为许多编译器“知道”调用 strlen
的含义并用常量替换它,如果参数是常量(内联 string_view
构造函数后,参数变为字符串文字。因此 std::string_view sv("hello folks")
将是高效的)。
关于c++ - 为什么没有 std::string_view 的模板构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47337363/