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来自莫斯科的回答!它有助于.
如果有一台兼容Intel的计算机,那么该函数似乎会将结果返回到寄存器中EAX.
同时该函数将该寄存器用于变量i.
因此在循环之后,寄存器总是包含44.
该值接收调用者.
当然,该函数具有未定义的行为.它应该有一个显式的return语句,在循环之后的函数末尾有一个表达式.
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |