8

如果我有一个布尔值和一些可能会更改它的代码,然后我想将它设置为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;
}

哪个更快?

注意

我之所以这样问,是因为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 它可以是质数或不是质数)

4

2 回答 2

3

这是非常非常挑剔的,但一般来说最好只改变价值。

无论如何,检查和设置值的开销大致相同,那么为什么在某些情况下必须同时做这两个呢?

现在,如果您想知道是否应该覆盖一些自定义类型(比如说 100000 个单词的列表)或者您是否应该首先检查它是否需要被覆盖(比如说通过简单地检查布尔值或时间戳)然后您应该首先检查,因为检查布尔值或时间戳的成本远低于将这么多单词写入内存。

当然,这完全取决于各种因素,例如您正在编辑的内存是否在缓存中,“检查”有多昂贵,您需要多久覆盖一次值与不需要覆盖它的频率,当然还有内存的大小。

于 2012-10-14T22:52:58.210 回答
0

怎么样:

if ( b = !!cond ) {

}

b如果需要有值,则检查条件并将值应用于b。如果您想b保持真实,那么我会说使用您的其他示例之一。它不应该有所作为。

于 2012-10-14T22:53:12.750 回答