首页 > 后端开发 > C++ > 正文

为什么在 C 中将临时对象绑定到常量引用可以延长其生命周期?

DDD
发布: 2024-11-02 17:03:02
原创
626 人浏览过

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

返回临时对象并绑定到常量引用

在 C 中,将临时对象分配给常量引用是一种常见操作,最初可能会引发有关其生命周期的问题

问题:

为什么下面的代码有效并且不会导致编译器错误?

<code class="cpp">string foo() {
  return string("123");
}

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>
登录后复制

答案:

C 明确定义将临时对象绑定到基于常量堆栈的引用可延长临时对象的生命周期以匹配引用的生命周期。在这种情况下, foo() 返回的临时对象一直存在到 main() 函数结束。

说明:

  • 临时对象通常有一个生命周期短,在它们出现的表达式末尾结束。
  • 但是,C 允许堆栈上的 const 引用例外。
  • 通过将临时值绑定到堆栈上的 const 引用,临时的生命周期会延长以匹配引用的生命周期。
  • 这可以防止因引用指向已销毁的对象而导致悬空引用错误。

注意:

  • 此异常仅适用于基于堆栈的 const 引用。
  • 它不适用于作为对象成员的引用。
  • 对于更多详情,请参阅 Herb Sutter 的《GotW #88:“最重要的常量”的候选人》。

以上是为什么在 C 中将临时对象绑定到常量引用可以延长其生命周期?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!