【发布时间】:2013-12-05 06:52:51
【问题描述】:
问题:
在处理布尔值时,使用 if 语句或方程通常会更好吗?请解决以下问题,请记住,您的答案应该适用于大多数(如果不是全部)代码:
- 哪个更快,为什么?还是差异太小以至于不显着?
- 其中之一是否更有活力?在某些情况下,其中一个可能不及另一个有什么原因吗?
- 哪个是更好/首选的代码,还是完全基于意见的实践?
(我指的是 C++,但由于这个问题是半通用的,因此也可以参考或比较其他语言。)
示例(在 C++ 中):
鉴于以下广泛的场景,
int n = (anything);
bool x_not_y = (declared as random boolean value);
如果x_not_y 为真而int y = n 相反,则目标是使int x = n 使用if/else 语句:
if (x_not_y)
x = 5;
else
y = 5;
(以下简称)
x_not_y?x = 5:y = 5;
或使用方程式?
x = (x * (int)!x_not_y) + (5 * (int)x_not_y);
y = (y * (int)x_not_y) + (5 * (int)!x_not_y);
【问题讨论】:
-
一个有趣的问题。起初我认为答案很明显,但现在我想等着看比我更有经验的人会怎么想!
-
我冒着被过早的优化人员大喊大叫的风险,但答案是:“这取决于很多事情”
-
C++ 中没有“方程式”。只有语句,它们(除其他外)由表达式组成。
-
@Mysticial - 打败我。另外,请记住,您的编译器(几乎总是)比您聪明得多:)
-
大多数关于分支预测优化的 hack 不符合 C 标准,因此往往依赖于编译器。
标签: c++ performance if-statement equation