在C ++中设置其值之前检查变量是否更好?

时间:2012-10-14 22:51:19

标签: c++ performance variables

如果我有一个布尔值和一些代码可能会更改它,然后我想将其设置为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则可以是素数或不是素数

2 个答案:

答案 0 :(得分:3)

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

检查和设置一个值的开销大致相同,所以为什么你想在某些情况下同时做两件事?

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

这当然全部取决于各种因素,例如您正在编辑的内存是否在缓存中,“检查”的成本是多少,您需要多长时间覆盖一次该值以及不需要的频率。被覆盖,当然还有记忆的大小。

答案 1 :(得分:0)

怎么样:

if ( b = !!cond ) {

}

如果b需要值,则检查条件并将值应用于b。如果你希望b保持真实,那么我说要使用你的其他一个例子。它不应该有所作为。