如果我有一个布尔值和一些代码可能会更改它,然后我想将其设置为true
,我应该检查它是否为false
?
例如:
bool b = false;
// Some code
// Here "b" can be true or false
if (cond) {
b = true;
}
VS
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则可以是素数或不是素数
答案 0 :(得分:3)
这是非常挑剔的,但一般来说,改变价值会更好。
检查和设置一个值的开销大致相同,所以为什么你想在某些情况下同时做两件事?
现在,如果你想知道是否应该覆盖一些自定义类型(比如说一个100000字的列表),或者你应该检查一下它是否需要首先被覆盖(让我们说只需检查一个布尔值或者那么你应该先检查一下,因为检查布尔值或时间戳的成本远远低于将这么多单词写入内存。
这当然全部取决于各种因素,例如您正在编辑的内存是否在缓存中,“检查”的成本是多少,您需要多长时间覆盖一次该值以及不需要的频率。被覆盖,当然还有记忆的大小。
答案 1 :(得分:0)
怎么样:
if ( b = !!cond ) {
}
如果b
需要值,则检查条件并将值应用于b
。如果你希望b
保持真实,那么我说要使用你的其他一个例子。它不应该有所作为。