[英]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.