这两个项目的产出有何不同?为什么?

时间:2013-08-01 19:03:46

标签: c++ static

这是两个程序。它们都有一个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;
}

1 个答案:

答案 0 :(得分:2)

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

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