c++的几个重点版本,c++11,c++17,c++20都是有必要去了解的. c++11是现代c++的基石,c++20有了更现代的东西,而c++17承前启后,多了许多现代c++常用但又常忽略的东西,这里简单介绍一些.
std::string_view
std::string_view让我们像处理字符串一样处理字符序列,而不需要为它们分配内存空间。也就是说,std::string_view类型的对象只是引用一个外部的字符序列,而不需要持有它们。因此,一个字符串视图对象可以被看作字符串序列的引用
使用字符串视图的开销很小,速度却很快(以值传递一个string_view的开销总是很小)。然而,它也有一些潜在的危险,就和原生指针一样,在使用string_view时也必须由程序员自己来保证引用的字符串序列是有效的
和 std::string相比,std::string_view对象有以下特点:
- 底层的字符序列是只读的。没有操作可以修改底层的字符。你只能赋予一个新值、交换值、把视图缩小为字符序列的子序列。
- 字符序列不保证有空字符(‘\0’)终止。因此,字符串视图并不是一个空字符终止的字节流