c++ - 我可以用 AND 替换 if 语句吗?

标签 c++ if-statement logical-operators

我的教授曾经说过,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/

相关文章:

python - 在多个过滤条件中插入一个范围

java - MongoDB 相当于 Java 中的 SQL 表达式 '1=1'

c++ - 指针分配不同的行为

c++ - 调用 std::set<Type*>::find 时避免 const_cast

java - 我如何防止用户重复输入(在该程序中使用 JOptionPane 和 if 语句)

c - While 循环不适用于 C 中的 bool 语句(初学者!)

PHP fatal error : Call to undefined function test_input() in C:\wamp\www\web\new9. php 第 11 行

java - 来自 Java 的 OpenCV 中的逻辑操作

c++ - Visual Studio 2017 for Dymola 无法打开 stdio.h

c++ - 如何在屏幕的一部分插入图像?