string_view 在 g++ 9.3.0 中返回损坏?

Ken*_*eth 0 c++ c++17

在下面的代码中,callee 中的 string_view 值是每个设计的。但是返回给调用者之后,就报错了。这两个地址是不同的,所以似乎 return elision 不起作用。如果没有,我希望至少 string_view copy c'tor 应该可以工作,但也不能。

static string_view my_to_string_view(uint32_t value)
{
  std::array<char, 10> str;
  if (auto [ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), value); ec == std::errc())
  {
    cout << "data:" << str.data() << "\n";
    cout << "length is:" << ptr - str.data()<<"\n";
    auto ret = std::string_view(str.data(), ptr - str.data()); // C++17, uses string_view(ptr, length);
    cout << "return value in func:" << ret << "\n";
    return ret;
  }

  throw std::exception();
}

int main()
{
  std::string_view s = my_to_string_view(125);
  std::cout << "return value in main is:"<< s <<"\n";
}

data:125%%?
length is:3
return value in func:125
return value in main is:
Run Code Online (Sandbox Code Playgroud)

Mar*_*low 5

您正在返回一个引用局部变量的字符串视图。的string_view是好的,但在数据为“点”(即,阵列的部分str)不再存在。

有关更多信息,请参阅CppReferencestring_view