C++简单场景下优先使用string_view字面量的原因探究
为什么新版C++代码里爱用
string_view字面量? - 接口统一,少折腾:现在很多现代C++库的API都优先接受
std::string_view,而非老的const char*或std::string。直接用sv字面量,不管是传进哪个接受字符串的函数,都不用来回转换类型,代码风格统一,也减少了出错的可能。 - 避免无意义的内存分配:如果直接传普通字符串字面量给需要
std::string的函数,编译器会偷偷创建一个临时std::string对象——这意味着要分配内存、拷贝字符,完全没必要。而string_view只是个“视图”,不占额外内存,直接传就行。哪怕是std::cout这种有const char*重载的场景,统一用sv也能保持风格,万一后面代码改成调用接受string_view的函数,也不用改字面量。 - 自带长度,更快更安全:
string_view存了指针加长度,不像const char*需要用strlen()计算长度。比如做字符串比较、截取的时候,直接用存好的长度,不用重复计算,效率更高;同时也避免了因为忘了加终止符导致的越界问题。 - 现代C++的主流风格:C17之后,
string_view就是推荐的字符串传递方式——兼顾const char*的零拷贝特性,又解决了它没有长度信息的痛点。现在写新版C代码,用sv字面量已经是一种默认的、符合最佳实践的写法了。
内容的提问来源于stack exchange,提问作者Perpetual
相关产品推荐
相关产品推荐

