【发布时间】:2014-01-31 13:38:56
【问题描述】:
在下面的代码中,我用文字初始化了一个引用变量。
class ABC
{
public:
const int& a;
ABC():a(43) { }
void newfoo()
{
printf("NEWFOO %d",a);
}
};
int main()
{
ABC obj;
obj.newfoo();
}
这个程序的输出是NEWFOO 32767,当我知道以下代码可以正常工作时,这似乎不合逻辑。
int main()
{
const int& b=3;
printf("%d",b);
}
这里发生了什么?如果编译器在引用变量的初始化过程中声明了一些临时变量,那么该变量的范围不是在 main 内,因为该类在全局范围内吗?
【问题讨论】:
-
不要用文字初始化成员引用。我相信这是未定义的行为。
-
为什么要这样标准化?让这个编译没有意义。
标签: c++ variables reference initialization