我的教授曾经说过,if 语句相当慢,应该尽可能避免。我正在用 OpenGL 制作游戏,我需要很多游戏。 在我的测试中,通过短路将 if 语句替换为 AND 是可行的,但速度更快吗?
bool doSomething();
int main()
{
int randomNumber = std::rand() % 10;
randomNumber == 5 && doSomething();
return 0;
}
bool doSomething()
{
std::cout << "function executed" << std::endl;
return true;
}
我的目的是在渲染器的绘制函数中使用它。我的模型应该有标志,如果标志为真,则应该执行某个函数。
最佳答案
if-statements are rather slow and should be avoided as much as possible.
这是错误的和/或误导性的。大多数关于程序运行缓慢的简化陈述都是错误的。这个答案也可能有问题。
C++ 语句没有可以归因于它们的速度。重要的是编译程序的速度。这包括汇编语言指令;不是 C++ 语句。
可能更正确的说法是分支指令可以相对较慢(在现代超标量 CPU 架构上)(当分支不能很好地预测时)(取决于您比较的内容到;有很多东西要贵得多)。
randomNumber == 5 && doSomething();
if 语句通常被编译成使用分支指令的程序。短路逻辑与运算也经常被编译成使用分支指令的程序。用逻辑与运算符替换 if 语句并不是使程序更快的 Elixir 。
如果您将逻辑与生成的程序与用 if (randomNumber == 5)
替换的相应程序进行比较,您会发现优化器看穿了您的把戏并在两种情况下生成相同的程序集。
My models are supposed to have flags, if a flag is true, a certain function should execute.
为了避免分支,必须改变前提。与其遍历所有模型的序列、检查标志并有条件地调用函数,您可以创建一个应为其调用函数的所有模型的序列,对其进行迭代,然后无条件地调用函数 -> 无分支。这个替代方案更快吗?维护数据结构肯定会有一些开销,而分支预测器可能已经不需要这样做了。唯一确定的方法是测量程序。
关于c++ - 我可以用 AND 替换 if 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72188762/