我观察到如果我没有从int返回类型的空函数返回任何值1.但在下面的例子中,它显示4 3 2为o/p(这是静态变量的值在si这里打印?如果我打印si我会得到o/p为2 3 4,与我现在得到的相反.是否存在在这种情况下,与函数的堆栈推送和弹出有关吗?).另外我观察到如果我使用float作为返回类型,那么它打印nan nan nan为o/p.这种行为是编译器依赖的(我已尝试使用gcc和devcpp,观察相同)?这里到底发生了什么?请分享您对此的看法.
#include<iostream>
using namespace std;
int f(int i){
static int si = i;
si = si + i;
///return si;
}
int main(){
cout<<f(1)<<" "<<f(1)<<" "<<f(1);
//cout<<" "<<f(1); //if I uncomment this line then the o/p is: 4 3 2 5, it looks like it's printing the value of si.
}
Run Code Online (Sandbox Code Playgroud)
它看起来像是cout导致反向打印静态变量si值的行为?
这是未定义的行为.你必须从非空函数中返回一些东西*
从§6.6.3返回声明[stmt.return]
流出函数末尾相当于没有值的返回; 这会导致值返回函数中的未定义行为.
*该main()函数具有隐式,return 0因此无需显式返回.这是一个特例.