C ++:仅在未设置时设置布尔值

我的 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.永远不会将标志从真设置为假.我想知道哪种语句在性能方面更有意义,也许由于编译器优化,这个问题实际上不是问题.

myflag = true;

if (!myflag) myflag = true;

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

或者是我想太多了……

只是为了澄清一点......我后一种情况的目的是如果变量已经为真,则不写入内存.因此,仅当变量为 false 时才写入内存.

lili19890701 回答:C ++:仅在未设置时设置布尔值

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

if (!myFlag) myFlag = true; 的最大希望是编译器会注意到 if 无关紧要并对其进行优化.特别是,if 语句需要读取 myFlag 的当前值.如果该值尚未在缓存中,则意味着指令将在等待从内存中读取数据时停止.

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

这篇关于C ++:仅在未设置时设置布尔值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3181258.html

大家都在问