该参考文献指出第二个示例生成一个悬空指针。如何在第二个表达式中创建悬空指针而不是在第一个表达式中创建悬空指针?
std::string_view good("a string literal"); // OK: "good" points to a static array
std::string_view bad("a temporary string"s); // "bad" holds a dangling pointer
Run Code Online (Sandbox Code Playgroud)
s另外,字符串后面的字符是什么?
有s一个用户定义的文字运算符可以生成std::string.
这两行之间的区别在于,第一good行是string_view指向字符串文字,而字符串文字具有静态生命周期(它们持续整个问题)。一个bad是string_view指向一个临时对象string,该临时对象拥有它的数据——所以当临时对象被销毁时(在行的末尾),它会带走它的数据,我们最终会指向bad被破坏的内存。