-4

这里有两个程序。它们都有一个函数 fun(),其返回类型是对整数的引用。只有两个函数之间的区别在于,在一个函数中 x 被声明为 static int 而在另一个函数中则不是。第一个问题的输出是 10,第二个问题的输出是 30。如何?

方案一:

#include<iostream>
using namespace std;

int &fun()
{
    int x = 10;
    return x;
}
int main()
{
    fun() = 30;
    cout << fun();
    return 0;
}

方案二:

#include<iostream>
using namespace std;

int &fun()
{
    static  int x = 10;
    return x;
}
int main()
{
    fun() = 30;
    cout << fun();
    return 0;
}
4

1 回答 1

2

程序 1:您返回对一个变量的引用,该变量在函数返回后立即停止存在,然后将值 30 存储到该不存在的变量中,这可能会或可能不会使您的机器崩溃。无论如何,下面对 fun() 的调用会重新初始化一个局部变量“x”并返回它。

程序 2:函数范围内的静态变量有点像全局变量,只能由该函数访问。您返回对该静态(仍然存在)的引用,并设置其值。当您再次调用该函数时,静态仍然具有您分配给它的值。

于 2013-08-01T19:08:51.130 回答