string_view vs string &

标准

string_view 在C++17 才被支持

性能方面

https://stackoverflow.com/questions/40127965/how-exactly-is-stdstring-view-faster-than-const-stdstring

string_view 在某些情况下可以避免内存分配,比如这个例子:

1
2
3
4
5
6
7
8
void foo( std::string_view bob ) {
std::cout << bob << "\n";
}
int main(int argc, char const*const* argv) {
foo( "This is a string long enough to avoid the std::string SBO" );
if (argc > 1)
foo( argv[1] );
}

如果foo 函数接收的参数类型是 const std::string & ,那么在传递参数的时候需要先构造出一个string,而 string_view不需要

除此之外,更重要的场景是需要用到子串时,string_view的substr 是在原字符串的基础上读取,而string 的 substr 是返回一个新的字符串

生存周期方面

string_view 的生存周期是和原 string 一样的,因此在局部string不要能用在string_view上

空字符

string_view 尾部不包含空字符,除非是用字符常量构造的;而 string 尾部是含有空字符的,虽然size 不包含空字符位


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!