如果我有一个布尔值和一些代码可能会改变它,然后我想将它设置为true,我应该检查它是否为假?
例如:
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,则表示我不是素数.如果它为0,则可以是素数或不是素数)
解决方法
这是非常挑剔的,但一般来说,改变价值会更好.
无论如何,检查和设置值的开销大致相同,那么为什么在某些情况下你想要同时执行这两种操作呢?
现在,如果你想知道是否应该覆盖一些自定义类型(比如一个100000字的列表),或者你应该检查是否需要首先覆盖它(比如说只需检查一个布尔值或一个时间戳)然后你应该先检查一下,因为检查布尔值或时间戳的成本远远低于将这么多单词写入内存.
这当然都取决于各种因素,例如您正在编辑的内存是否在缓存中,“检查”的成本是多少,需要覆盖值的频率与不需要覆盖的频率,当然还有记忆的大小.