繁体   English   中英

函数获取参数的生命周期扩展由const&和const返回

[英]lifetime extension for function taking parameter by const& and returning by const&

在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(); 很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM