【发布时间】:2013-08-01 19:03:46
【问题描述】:
这里有两个程序。它们都有一个函数 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;
}
【问题讨论】:
-
第一个程序调用未定义的行为,第二个没有。
-
什么是未定义的行为?你能告诉我为什么两个程序的输出不同吗?
-
你可以google“未定义的行为”,你会明白的。