MSN*_*MSN 12 c++ struct reference lifetime
给出以下代码:
class foo
{
};
class bar: public foo
{
public:
~bar() { printf("~bar()\n"); }
};
class zab: public foo
{
public:
~zab() { printf("~zab()\n"); }
};
struct foo_holder
{
const foo &f;
};
int main()
{
foo_holder holder[]= { {bar()}, {zab()} };
printf("done!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
~bar()
~zab()
done!
Run Code Online (Sandbox Code Playgroud)
C++ 0x有一个子句规定这可以在用作新的初始化器时创建悬空引用,但它没有说明(至少我没有找到)有关临时引用的const引用的初始化.
这是不明确的行为吗?
我在 comp.std.c++ 上得到了答案:
http://groups.google.com/group/comp.std.c++/msg/9e779c0154d2f21b
基本上,该标准没有明确解决这个问题;因此,它的行为应该与本地声明的引用相同。