一、字符串视图 std::string_view
std::string_view 这是 C++17 标准库新增的 string_view 头文件中定义的一个类型。
此类型的值的行为非常类似于 const std::string 类型的值(注意有 const),但有一个重要区别:任何时候都不能通过它们的公共接口修改它们封装的字符串。也就是说,在某种程度上, string_view 具有固有的常量特性。
可以查看(view)但不能修改 string_view 的字符。有趣的是,这种局限暗示着这些对象与 std::string 不同,不需要自己操作字符数组的副本。相反,它们只需要指向某个实际的 std::string 对象、某个字符串字面量或者基他任何字符数组中存储的任何字符序列即可。
由于不涉及复制整个字符数组,初始化和复制 string_view 的开销很低。
因此,在隐式或显式创建时 std::string 会复制字符,而 string_view 则不会。
二、提示:
总是为输入参数使用 std::string_view 而不是 const std::string&,虽然使用 const std::string_view& 也没有问题,但那样还不如按按值传送 std::string_view, 因为复制这些对象的成本很低。