大家先看一个简单的代码,想想它的结果会是什么?
#include <iostream>
using namespace std;
void fun(int i)
{
static int value=i++;
value=i++;
cout<<value<<endl;
}
int main() {
// your code goes here
fun(0);
fun(1);
fun(2);
return 0;
}
现在公布答案是:
1
1
2
如果你的答案和结果一样,那么你不用往下看了,如果不一样,那就继续阅读一小会儿。
为什么前个都是1,而最后一个都是2呢?首先看fun(0),此时i=0;
value=0,然后value++,故value打印出来的值为1.这个还是很好理解的。可是fun(1)为何也是1?首先static变量有一个特点:无论static全局变量还是局部变量只被初始化一次,下一次的运算依据是上一次的结果值。所以fun(1)的时候,直接跳过初始化语句static int value=i++;执行value=i++,i=1,故value=1,打印结果仍然为1,fun(2)同理。