【发布时间】:2014-04-12 14:27:01
【问题描述】:
在我的 C++(假设这是 gcc)中,我执行以下操作:
bool prevCurve;
bool curveInside;
bool prevCurveIn
if (!(prevCurve && curveInside == prevCurveIn)){
...
}
编译器会这样优化吗:
bool prevCurve;
bool curveInside;
bool prevCurveIn
if (!prevCurve || curveInside != prevCurveIn){
...
}
【问题讨论】:
-
为什么要优化?
-
这取决于您的编译器、优化设置以及布尔值在何时何地获取它们的值(即,如果其中一个在您当前的范围内保持不变,它可能会完全消失 从等式)。
-
@LaszloPapp:在第一种情况下,必须检查比较的两个部分,理想情况下,在“优化”行中只有一个。
-
@Jongware:你什么意思?无论哪种方式,它都是三个操作:一个比较、一个否定和一个 OR/AND。
-
@LaszloPapp: 不,不是:) 在第二个例子中,如果
prevCurve是false,则第二部分不需要检查。
标签: c++ gcc optimization if-statement