首页  >  文章  >  后端开发  >  为什么在 C 中将临时对象绑定到常量引用可以延长其生命周期?

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

DDD
DDD原创
2024-11-02 17:03:02627浏览

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 引用。
  • 它不适用于作为对象成员的引用。
  • 有关更多详细信息,请参阅 Herb Sutter 的“GotW #88:“最重要的常量”的候选人。”

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn