在c'tor初始化器列表中的临时绑定临时参考
-
12-10-2019 - |
题
第12.2.5节在C ++ 03中说“在构造函数ctor-Inializer(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
现在,根据标准,foo()在Bar's C'tor的C'tor Init-list中生成的临时性将在Bar's 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应在构造函数的初始化列表中初始化。
不隶属于 StackOverflow