如果我有一个 bool 值和一些可能会更改它的代码,然后我想将它设置为 true
,我是否应该检查它是否为 false
?
例如:
bool b = false;
// Some code
// Here "b" can be true or false
if (cond) {
b = true;
}
对比
bool b = false;
// Some code
// Here `b` can be `true` or `false`
if (cond && !b){
b = true;
}
哪个更快?
注意:
我之所以这样问是因为 Sieve of Eratosthenes 的以下实现: http://bloc.gerardfarras.com/wp-content/uploads/2011/12/erastotenes.txt
if (( i % divisor == 0 ) && ( numsprimers[i] == 0 )) {
numsprimers[i] = 1;
}
(如果 numsprimers[i]==1
表示 i
不是质数。如果是 0 则可以是质数也可以不是)
最佳答案
这是非常非常挑剔的,但一般来说,最好只更改值。
无论如何,检查和设置一个值的开销大致相同,那么为什么在某些情况下您需要同时执行这两项操作?
现在,如果您想知道是否应该覆盖某些自定义类型(比如说一个包含 100000 个单词的列表),或者您是否应该检查是否需要先覆盖它(比如简单地检查一个 bool 值或一个timestamp) 那么你应该先检查,因为检查一个 bool 值或时间戳的成本比将这么多单词写入内存要少得多。
当然,这完全取决于各种因素,例如您正在编辑的内存是否在缓存中、“检查”的开销有多大、您需要多久覆盖一次值以及不需要多久覆盖一次被覆盖,当然还有内存的大小。
关于c++ - 在 C++ 中设置变量值之前检查变量是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887342/