C++:仅在未设置时设置 bool 值

标签 c++ boolean variable-assignment conditional-statements compiler-optimization

我的 C++ 应用程序中有通常执行此操作的代码:

bool myFlag = false;
while (/*some finite condition unrelated to myFlag*/) {
    if (...) {
        // statements, unrelated to myFlag
    } else {
        // set myFlag to true, perhaps only if it was false before?
    }
}
if (myFlag) {
    // Do something...
}

我的问题与代码的 else 语句有关。基本上,我的循环可能会根据未满足的特定条件将 myFlag 的值从 false 设置为 true。永远不会将标志从 true 设置为 false。我想知道哪种语句在性能方面更有意义,也许由于编译器优化,这个问题实际上不是问题。

myFlag = true;

if (!myFlag) myFlag = true;

我通常会选择前者,因为它需要编写的代码更少。但是,我开始怀疑它是否涉及不必要的内存写入,因此如果 myFlag 已经为真,后者会阻止不必要的写入。但是,使用后者是否会花费更多时间,因为存在条件语句并因此使用更多指令编译代码?

或许是我想太多了...


更新 1

稍微澄清一下……后一种情况的目的是在变量已经为真时不写入内存。因此,仅当变量为 false 时才写入内存。

最佳答案

几乎可以肯定,您只使用 myFlag = true; 会更好。

关于 if (!myFlag) myFlag = true; 您可以希望得到的最好结果是编译器会注意到 if 是不相关的并将其优化掉.特别是,if 语句需要读取 myFlag 的当前值。如果该值不在缓存中,这意味着指令将在等待从内存中读取数据时停止。

相比之下,如果您只是写入(不先进行测试),则可以将值写入写入队列,然后可以立即执行更多指令。直到/除非您读取 myFlag 的值(并且假设它在写入后很快就被读取,它可能仍在缓存中,因此停顿将是最小的),您不会遇到停顿。

关于C++:仅在未设置时设置 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033916/

相关文章:

c++ - 单击关闭控制台窗口以结束 C++ 控制台程序是正确的方法吗?

c++ - ns3中udp连接的吞吐量计算

vector - Armadillo C++ 线性代数库 : How to create vector of boolean

java - java中比较字符串的问题

javascript - 循环中的 ES6 解构和变量赋值

c++:按成员分配是如何工作的?

c++ - 为什么 C++ 支持十六进制赋值,但不支持二进制赋值?如何最好地存储标志?

c++ - 我怎样才能声明一个常量数据成员但稍后才初始化它?

c++ - SQL Server 2008 中具有单个 INSERT 的多行

Java:收到警告 "SimplifyBooleanExpression"..我该如何修复?