如果我们不从c ++中的非void返回类型函数返回任何内容,那么返回值是什么?[实验]

Ren*_*uka 0 c++

我观察到如果我没有从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值的行为?

jua*_*nza 7

这是未定义的行为.你必须从非空函数中返回一些东西*

§6.6.3返回声明[stmt.return]

流出函数末尾相当于没有值的返回; 这会导致值返回函数中的未定义行为.

*该main()函数具有隐式,return 0因此无需显式返回.这是一个特例.

  • @Renuka这是未定义的行为.任何事情都可能发生. (3认同)