std::string_view示例中末尾‘s’的作用解析及参考指引
解答:std::string_view示例中末尾‘s’的意义
那个末尾的s可不是随便加的——它是C++标准库提供的用户自定义字面量,专门用来生成std::string对象的!
举个你可能在cppreference看到的错误示例:
std::string_view sv = "hello"s; // 危险!
这里的"hello"s会直接创建一个临时的std::string实例,而std::string_view本质上只是对字符串内存的一个“视图”,并不持有内存。当这条语句执行完毕后,那个临时的std::string就会被销毁,剩下的sv就变成了指向无效内存的悬垂引用——这也是这个示例被用来做反面教材的原因。
再给你理清楚几个关键点:
- 要使用这个
s字面量,得先引入对应的命名空间:using namespace std::literals::string_literals;,不然编译器会不认识它。 - 如果不加
s,"hello"就是默认的const char*类型(准确说是const char[6]),字符串字面量的生命周期是整个程序运行期,所以绑定给std::string_view是完全安全的。 - 这个字面量的核心用途就是简化
std::string的创建:不用写繁琐的std::string("hello"),直接敲"hello"s就能得到一个std::string对象,代码更简洁。
内容的提问来源于stack exchange,提问作者eric
相关产品推荐
相关产品推荐

