简介
字符串视图类基于字符串类构建,它限制了可在字符串上执行的操作。
string view 是一个非拥有的字符串引用,用于表示一段字符序列的视图。该字符序列可以是 C++ 字符串(std::string),也可以是 C 风格字符串(C-string)。使用 string view 需要包含头文件 <string_view>。
🔑 string view 是一种用于优化拷贝的字符串类型
从宏观角度来看,std::string_view的主要目的是避免复制那些已经被其他对象拥有的字符串数据,并提供对类似std::string对象的不可变访问。string view 可以看作是一种受限的字符串类型,仅支持不可变操作。此外,string viewsv提供了两个特殊的“修改”操作:sv.remove_prefix和sv.remove_suffix,它们通过调整视图范围来改变前缀或后缀的可见部分,并不真正修改底层字符数据。
string view 是一个类模板,其模板参数为字符类型和字符特征(traits),其中字符特征具有默认值。与 std::string 不同,string view 是非拥有者(non-owning),因此不需要分配器(allocator)。
1template < class CharT, class Traits = std::char_traits<CharT> > 2 class basic_string_view;
与字符串类型类似,string view 也针对四种底层字符类型 char、wchar_t、char16_t 和 char32_t 定义了四个别名:
1typedef std::string_view std::basic_string_view<char>; 2typedef std::wstring_view std::basic_string_view<wchar_t>; 3typedef std::u16string_view std::basic_string_view<char16_t>; 4typedef std::u32string_view std::basic_string_view<char32_t>;
ℹ️ std::string_view 就是通常所说的 string view
在 C++ 中提到 string view 时,99% 的情况下指的是针对字符类型char的特化版本std::basic_string_view<char>。本书中的讨论也遵循这一惯例。