当函数在结尾处缺少return语句时,为什么它可以工作?

Xun*_*ong 2 c++ return function

我正在学习C++.下面的代码让我困惑:

int test_return(int a)
{
    for (int i = 40; i < 44; i++)
    {
        if (i == a)
        {
            cout << "return here with i: " << i << endl;
            return 59;
        }
    }
}

int main()
{
    cout << "in main: " << test_return(61) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道我在函数结束时错过了一个return语句test_return.

但编译器说没有错误,它在执行时有效.

于是,我拿起一些特殊号码,如40,44,59,61,看看哪一个函数test_return会选择回国.

我试过好几次,输出总是如下:

in main: 44
Run Code Online (Sandbox Code Playgroud)

似乎函数在for语句结束之前test_return返回了int i.

我的问题是:

这合法吗?

它是如何工作的?

更新:

我在函数末尾添加了这些代码test_return:

int i = 100;
int square = i * i;
Run Code Online (Sandbox Code Playgroud)

它出来了:

in main: 10000
Run Code Online (Sandbox Code Playgroud)

感谢@Vlad来自莫斯科的回答!它有助于.

Vla*_*cow 6

如果有一台兼容Intel的计算机,那么该函数似乎会将结果返回到寄存器中EAX.

同时该函数将该寄存器用于变量i.

因此在循环之后,寄存器总是包含44.

该值接收调用者.

当然,该函数具有未定义的行为.它应该有一个显式的return语句,在循环之后的函数末尾有一个表达式.