延长函数的寿命延长 由 const& 获取参数并由 const& 返回

lifetime extension for function taking parameter by const& and returning by const&

本文关键字:const 参数 返回 获取 函数      更新时间:2023-10-16

在C 中,您有以下内容:

std::string get_string();
std::string const& v = get_string();

从get_string((返回的临时寿命延长了参考V;

的相同寿命

如果我有以下内容:

std::string const& get_string(std::string const& p) {
  return p;
}
std::string const& v = 
get_string(std::string{"Hello"});

临时的寿命扩展了吗?还是这是一个悬空的参考;

我的理解是,临时性与P的寿命约束而且仅在功能的持续时间内存在,而对临时的次要引用则不延长寿命。

预期结果是什么?

是的,临时的寿命不会进一步延长;完整表达后,参考 v变为悬挂。

std::string const& v = get_string(std::string{"Hello"});
// v becomes dangled now

我的理解是临时性与P的寿命绑定,并且仅在函数的持续时间内存在

准确地说,临时存在直到完整表达式结束,而不仅仅是函数的持续时间。

  • 存在函数调用中的参考参数的临时绑定到包含该函数调用的完整表达式结束之前:如果函数返回了一个参考,该引用概述了完整的表达式,则将成为悬而未决的参考。

通常,暂时的寿命不能通过"将其传递给":第二个参考",从临时界限的参考初始化,不会影响其寿命。

这意味着auto sz = get_string(std::string{"Hello"}).size();之类的东西很好。