gpt4 book ai didi

c++ - 不允许临时绑定(bind)到初始化列表中的引用的理由是什么?

转载 作者:行者123 更新时间:2023-11-30 02:01:10 24 4
gpt4 key购买 nike

简单的例子:

struct A
{
A() : i(int()) {}
const int& i;
};

来自 gcc 的错误:

a temporary bound to 'A::i' only persists until the constructor exits

来自 12.2p5 的规则:

A temporary bound to a reference member in a constructor’s ctor-initializer (12.6.2) persists until the constructor exits.

问题

有人知道这条规则的基本原理吗?在我看来,让临时对象存活到引用消失会更好。

最佳答案

我认为扩展到对象生命周期不需要理由。反之亦然!

临时对象的生命周期扩展仅扩展到封闭范围,这既自然又有用。这是因为我们对接收引用变量的生命周期有严格的控制。相比之下,类成员根本不在“范围内”。想象一下:

int foo();
struct Bar
{
Bar(int const &, int const &, int const &) : /* bind */ { }
int & a, & b, & c;
};

Bar * p = new Bar(foo(), foo(), foo());

foo() 临时对象定义有意义的生命周期延长几乎是不可能的。

相反,我们有默认行为,即 foo() 临时对象的生命周期延伸到包含它的完整表达式的末尾,不再延伸。

关于c++ - 不允许临时绑定(bind)到初始化列表中的引用的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419616/

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