(编辑:b是现有的布尔值)
时
b = (a > c);
比
快if (a > c)
b = true;
编辑:我知道收益会很小,即使这部分代码会被执行很多次。但我仍然在理论上回答。
谢谢
答案 0 :(得分:17)
正如Darin所说,你应该使用任何更易读的速度差如果任何无关紧要......但值得注意的是它们并不等同。如果这是在一个方法内(所以b
是一个局部变量),那么第一种方法将b
明确分配,而第二种方法则不会。
就我个人而言:
bool b = a > c;
我认为不需要额外的括号,我更倾向于在声明时进行初始化。如果我 使用if
块,我肯定会使用大括号......
答案 1 :(得分:9)
在这里谈论更快在实践中没有意义,因为这是一个你不应该做的微优化。至于你应该使用哪一个,使用一个对你更具可读性的那个(第一个对我来说更具可读性)。
答案 2 :(得分:3)
第二个完全没用。之后并非明确赋值变量。所以你无法阅读它,需要在使用之前再次分配它,这会覆盖你的作业结果。
但除非真的有必要,否则我不会担心这种微观优化。在这种情况下,无论如何都需要分析和检查生成的汇编代码。
如果您指定参考类型字段(非本地变量),则AFAIK类似的优化是有意义的。由于参考字段的分配具有与GC交互相关的一些额外成本。但是局部变量我除了没有显着差异。在某些情况下,赋值可能稍微更快,因为如果分支预测失败,则条件有问题。
答案 3 :(得分:0)
除了其他答案中提到的错误之外,在像C#这样的托管语言中,这些优化绝对没有用处。在实际评估此代码之前,有很多层次的翻译。如果您使用Assembly或Ye Olde C ++,那么这些优化才有意义。
答案 4 :(得分:0)
那么,第二个版本将在硬盘上占用更多内存(如果我们不考虑优化等) - 即文件会更大。
第一个是这样的:
a > b
存储在x
mov b,x
第二个将是这样的:
a > b
存储在x
x
是真的吗?
是:
b = true
继续执行
没有
继续执行