[英]Conditional branches
为什么这段代码会编译?
#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时,会发生什么/返回我的函数?
结果是未定义的,因此编译器可以自由选择 - 您可能会得到恰好位于调用者期望结果的适当堆栈地址的情况。 激活编译器警告,编译器将通知您有关遗漏的信息。
在这种情况下,编译器不需要给出错误。 许多人会,有些人只会发出警告。 有些人显然不会注意到。
这是因为您的代码可能会在此函数之外确保条件始终为true。 因此,它不一定是坏的(虽然它几乎总是,这就是大多数编译器至少会发出警告的原因)。
规范将声明退出应返回值但未返回值的函数的结果是未定义的行为。 可以返回值。 或者程序可能崩溃。 或任何可能发生的事情 这是未定义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.