通过常量引用理解临时对象的生命周期
简介:
在 C 中,生命周期临时对象的类型通常仅延伸到创建它们的表达式的末尾。但是,当临时对象绑定const引用时会出现异常,延长了其生命周期,超出了原来的作用域。
具体询问:
下面的代码为什么编译通过执行成功,即使 foo 函数返回的字符串是临时对象?
<code class="cpp">string foo() { return string("123"); } int main() { const string& val = foo(); printf("%s\n", val.c_str()); return 0; }</code>
答案:
C 标准明确定义绑定临时对象对堆栈上 const 的引用会延长临时变量的生命周期,直到引用本身的生命周期为止。因此,在提供的代码中, foo() 返回的临时字符串一直保持活动状态,直到主函数的右大括号为止。
机制:
此功能确保对临时对象的引用不会成为悬空引用,否则会导致未定义的行为。当临时对象绑定到 const 引用时,它的内存被有效地固定,允许程序继续安全地使用它。
限制:
需要注意的是此生命周期延长仅适用于基于堆栈的引用。相反,作为对象成员的引用不会延长临时对象的生命周期。
其他信息:
有关此主题的更详细讨论,请参阅GotW #88:赫伯·萨特“最重要的常量”候选人。
以上是为什么常量引用可以延长 C 中临时对象的生命周期?的详细内容。更多信息请关注PHP中文网其他相关文章!