该代码的输出为30。但是我不确定它是如何实现的。
#include <iostream>
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 30;
std::cout << fun();
return 0;
}
我期望输出为10,但显示为30。如何?
答案 0 :(得分:6)
您的fun
给出int
的位置(因为它返回了reference)。该位置是static
变量x
,它被初始化(一次,从概念上讲,在程序运行之前)为10。
然后fun() = 30;
正在分配该位置。因此x
被分配给30。
最后cout << fun()
显示该位置的内容。
如果x
是automatic variable,则您的代码将包含undefined behavior。
PS。像&
这样的int &r = x;
一元引用的粗略思考方式是,它对代码进行“转换”为:引入幻像指针int *p = &x;
(其中p
是新鲜变量不会在其他地方出现),并在该r
范围内的任何地方,将*p
替换为&r
,将p
替换为r
。