#include <iostream>
std::string_view return_string_view();
using namespace std;
int main()
{
string got;
auto peeked = return_string_view();
got += peeked;
cout << got << endl;
return 0;
}
string_view return_string_view()
{
string const s = string().assign( 2, 'x' );
auto sv = string_view( s.c_str() );
return sv;
}
Run Code Online (Sandbox Code Playgroud)
操作系统版本
Linux vm 5.19.0-45-generic #46-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 7 09:08:58 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会版本
Linux vm 5.19.0-45-generic #46-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 7 09:08:58 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
预期返回“xx”,但为什么返回奇怪的字符串?
s在作用域结束时(return_string_view返回时)被销毁,因此std::string_view返回的是已停止存在的return_string_viewa 的视图。std::string
请记住,astring_view并不拥有它所查看的内存。它通常被实现为指针和长度,但实际数据由 拥有s。
从 指出的内存中读取会使string_view程序出现未定义的行为。该程序可能会崩溃,甚至更糟。