为什么要宣布
sv2
每
[basic.string.literals]/1
:
string operator""s(const char* str, size_t len);
string{str, len}
.
在
"foo"s
,字符串文本
"foo"
用于初始化临时
std::string
. 字符被复制到临时
标准::字符串
std::string_view
是非所有者视图,并且
标准::字符串
. 在临时
被摧毁了,
一直指向(现在过期的)底层数组,并尝试输出
导致未定义的行为。
sv3
很好
[string.view.literals]/1
constexpr string_view operator""sv(const char* str, size_t len) noexcept;
退货:
string_Âview{str, len}
因此
sv3型
相当于:
1.
std::string_view sv3{"baz", 3};
sv3型
直接指向字符串文字
"baz"
. 字符串文字具有静态存储持续时间,不会过期。
1.
may
或
may not
string_view
是非拥有的,复制的
s不引入新的临时字符串。因此,无论是否要进行复制,复制的状态
sv3型
是一样的。