std::string_view
使用临时初始化 a 是一个常见的错误std::string
。
using namespace std::literals;
std::string_view sv1 = "foo" ; // good
std::string_view sv2 = "bar"s; // bad: "foo"s will expire
std::cout << sv1 << "\n" // outputs foo
<< sv2 << "\n"; // undefined behavior
那是因为"bar"s
, 临时, 在full-expressionstd::string
结束时被销毁。
但是怎么样"foo"sv
?
std::string_view sv3 = "baz"sv;
当然这应该可行,因为后缀sv
在其他情况下是无用的。但这与 有何根本不同"baz"s
?也就是说,为什么引入的字符串"baz"sv
不会过期?