gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:26:06 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com