gpt4 book ai didi

c++ - 在 c'tor 初始化器列表中将临时绑定(bind)到 const 引用

转载 作者:IT老高 更新时间:2023-10-28 23:21:35 27 4
gpt4 key购买 nike

C++03 中的第 12.2.5 节说“临时绑定(bind)到构造函数的 ctor-initializer (12.6.2) 一直持续到构造函数退出"
所以我尝试了以下程序

#include<iostream>
using namespace std;

struct foo
{
foo()
{
cout<<"foo c'tor"<<endl;
}
~foo()
{
cout<<"foo d'tor"<<endl;
}
};

struct bar
{
const foo &ref;
bar():ref(foo())
{
cout<<"bar c'tor"<<endl;
}

};

int main()
{
bar obj;
}

我得到的输出是:

foo c'tor
foo d'tor
bar c'tor

现在按照标准,由 bar 的 c'tor 的 c'tor init-list 中的 foo() 临时生成的临时文件将在 bar 的 c'tor 之后被销毁,因此应该在之后打印 foo d'tor bar c'tor
但情况恰恰相反。
请说明原因。

最佳答案

我已经在 MS VS 2010 上尝试过这个,它给我的输出在编译期间也给出了警告:

警告 C4413: 'bar::ref' : 引用成员被初始化为在构造函数退出后不会持续存在的临时成员

foo c'tor
bar c'tor
foo d'tor
Press any key to continue . . .

似乎 MS VS 2010 正确地实现了规范。我同意这是 g++ 的错误。

编辑:ref 应该在构造函数的初始化列表中初始化。

关于c++ - 在 c'tor 初始化器列表中将临时绑定(bind)到 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721136/

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