条件分支

Conditional branches

本文关键字:分支 条件      更新时间:2023-10-16

为什么要编译这段代码?

#include <iostream>
int foo(int x)
{
   if(x == 10)
     return x*10;
}
int main()
{
int a;
std::cin>>a;
std::cout<<foo(a)<<'n';
}

编译器不应该给我一个错误,比如"不是所有代码路径都返回一个值"?当x不等于10时,会发生什么/返回我的函数?

结果是未定义的,因此编译器可以自由选择——您可能会得到调用程序期望结果的适当堆栈地址。激活编译器警告,编译器将通知您您的遗漏。

在这种情况下,编译器不是所必需的。许多人会,有些人只会发出警告。有些人显然不会注意到。

这是因为有可能您的代码在该函数之外确保条件始终为真。因此,它不一定是坏的(尽管它几乎总是坏的,这就是为什么大多数编译器至少会发出警告的原因)。

规范将指出,退出一个应该返回值但没有返回值的函数的结果是未定义的行为。可能会返回一个值。或者程序可能会崩溃。或者任何事情都可能发生。它是未定义的。