这篇文章讲解的很详细:
[译]C++17,使用 string_view 来避免复制_tkokof1的专栏-CSDN博客_string_view
主要有三个新的知识点:
1. string 类型只有在字符串超过指定大小(具体实现相关)时才会申请(堆)内存,对于 MSVC 来说,指定大小为 15, 对于 GCC 和 Clang,这个值则为 23.
2.如果只想访问(而不修改)他们时,使用 std::string_view 可以避免字符串数据的复制,从而提高程序效率。
比如定义函数 A(const string &str) 可以改成 A( std::string_view str);
3.非常大的差别: td::string::substr 和 std::string_view::substr 的算法复杂度. std::string::substr 是线性复杂度(依赖于字符串长度), std::string_view::substr 则是常数复杂度(不依赖于字符串长度).最后的结论就是: std::string_view::substr 的性能要大幅优于 std::string::substr.