任何人都可以告诉我以下代码中发生了什么。我期待左值错误,如果我删除函数的引用返回类型将会发生。但它给我的输出为20.请解释。感谢。
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 20;
cout << fun();
return 0;
}
答案 0 :(得分:3)
输出符合预期。在致电fun() = 20;
中,x
中的实际 fun()
已分配20
,因为fun()
会返回参考到x
。在通话cout<<fun();
中,会打印指定的值,即20
。
因为x
被声明为static
,所以即使在func()
返回后它也可以在内存中使用。方法作用域static
变量在方法中第一次遇到时创建,并保留到程序终止。 static
变量仅初始化一次,后续方法调用将看到最后更新的值。更多信息来自static
here和here。
答案 1 :(得分:2)
基本C ++语义:
static
变量。如果您要在x
之外的fun()
分配内容,x
必须住在某个地方,对吧?使它static
给它一个永久的位置,每次都会被重新访问。这就是20
的价值持续存在的原因。