假设我有以下代码:
void some_function(std::string_view view) {
std::cout << view << '\n';
}
int main() {
some_function(std::string{"hello, world"}); // ???
}
Run Code Online (Sandbox Code Playgroud)
viewinside会some_function指的string是已被破坏的吗?我很困惑,因为考虑到这段代码:
std::string_view view(std::string{"hello, world"});
Run Code Online (Sandbox Code Playgroud)
产生警告(来自clang++):
warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]
Run Code Online (Sandbox Code Playgroud)
有什么不同?
(奇怪的是,使用大括号{}而不是方括号()来初始化string_view上面的内容消除了警告。我也不知道为什么会这样。)
需要明确的是,我理解上面的警告( 的string_view寿命比 长string,所以它持有一个悬空指针)。我要问的是为什么传递 astring不会some_function产生相同的警告。