gpt4 book ai didi

c++ - 哪个标准措辞告诉我们 ref-to-const 临时生命周期仅延长 "works once"?

转载 作者:IT老高 更新时间:2023-10-28 22:03:59 28 4
gpt4 key购买 nike

我在聊天中看到了以下示例:

#include <iostream>
struct foo { ~foo() { std::cout << "destroying!\n"; } };
const foo& func(const foo& a, const foo&) { return a; }

int main()
{
foo x;
const foo& y = func(foo(), x);
std::cout << "main\n";
}

Output :

destroying!
main
destroying!

这似乎表明 foo 临时文件的生命周期没有扩展到整个 main,即使它绑定(bind)到 ref-to- const 在那个范围内。

那么,可以推测,延长生命周期只能“工作一次”;也就是说,它在 func 的参数被初始化但不通过连续绑定(bind)传递时应用。

我的解释正确吗?如果是这样(并且如果任何单独的段落直接适用)定义这种行为的标准措辞是什么?

最佳答案

你几乎是对的。这种行为实际上来自特定的函数调用,而不是因为任何“只工作一次”的规则。

这是整个生命周期延长“功能”的措辞,相关规则以粗体强调:

[C++11: 12.2/5]: [..] The temporary to which the reference is bound or the temporary that is the complete object of a subobject to which the reference is bound persists for the lifetime of the reference except:

  • [..]
  • A temporary bound to a reference parameter in a function call (5.2.2) persists until the completion of the full-expression containing the call.
  • [..]

关于c++ - 哪个标准措辞告诉我们 ref-to-const 临时生命周期仅延长 "works once"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14735630/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com