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

标签 c++ performance variables

如果我有一个 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/

相关文章:

c++ - 打包压缩资源数据

c++ - C++ : . NET Framework 警告的 Visual Studio 设置

java - 在困难的场景中有效地保持 Java 集合的排序

database - 您如何衡量流经您的软件的所有查询?

c++ - 是否可以重新启动 boost::future?

c++ - 函数调用可以重新排序吗

performance - 今天解释型语言应该有多快?

Java SQL 插入多个变量

tsql - T-SQL 使用 CTE 初始化 View 内的变量

javascript - 如何在 JavaScript 中为私有(private)变量使用与函数参数相同的名称? (让代码看起来更好)