这是两个程序。它们都有一个fun()函数,其返回类型是对整数的引用。只有两个函数之间的区别在于,在一个函数中,x被声明为静态int,而在另一个函数中则不是。第一个问题的输出是10,第二个问题的输出是30.怎么样?
计划1:
#include<iostream>
using namespace std;
int &fun()
{
int x = 10;
return x;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
计划2:
#include<iostream>
using namespace std;
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
答案 0 :(得分:2)
程序1:您返回对函数返回后立即停止存在的变量的引用,然后将值30存储到该不存在的变量,该变量可能会或可能不会使您的计算机崩溃。无论如何,以下调用fun()重新初始化局部变量“x”并返回它。
程序2:函数范围内的静态变量有点像只能访问该函数的全局变量。您返回对该静态(仍然存在)的引用,并设置其值。再次调用该函数时,静态仍然具有您为其分配的值。