条件分支
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时,会发生什么/返回我的函数?
结果是未定义的,因此编译器可以自由选择——您可能会得到调用程序期望结果的适当堆栈地址。激活编译器警告,编译器将通知您您的遗漏。
在这种情况下,编译器不是所必需的。许多人会,有些人只会发出警告。有些人显然不会注意到。
这是因为有可能您的代码在该函数之外确保条件始终为真。因此,它不一定是坏的(尽管它几乎总是坏的,这就是为什么大多数编译器至少会发出警告的原因)。
规范将指出,退出一个应该返回值但没有返回值的函数的结果是未定义的行为。可能会返回一个值。或者程序可能会崩溃。或者任何事情都可能发生。它是未定义的。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在没有太多条件句的情况下,我如何避免被零除
- 基于多个条件处理地图中的所有元素
- 函数指针与条件分支
- 条件分支评估
- 如果条件取决于模板类型并且在编译时已知,是否可以保证C++编译器不会生成分支?
- Clang++ 6.0 内存清理器未报告返回值指示条件分支的函数中的未初始化局部变量
- 根条件分支选择
- 最佳无分支有条件选择两个SSE2填充双打
- 如何避免参数数量依赖于条件的调用分支?
- 有没有办法避免此函数中的分支/条件逻辑?
- C ,最有效的方法将大写速度更改为小写,反之亦然,而无需条件分支
- 常量条件的分支预测
- C++位掩码/条件分支优化
- 条件分支
- 如何在多个条件下进行分支/切换
- 如果设置了最低位,则有条件地无分支异或
- 为什么GCC没有尽可能地优化这组分支和条件?
- 指针解引用开销vs分支/条件语句
- 如果不能在条件分支中调用 CUDA,如何在 CUDA 中减少__syncthreads?