左到右的逻辑运算符(&&和||)的评估是有保证的吗?
假设我有这样一个例子:
这个能保证和这个一样吗?
这也可能非常重要,假设我们有两个要求,
假设我有这样一个例子:
SDL_Event event;
if (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
// do stuff
}
}
这个能保证和这个一样吗?
SDL_Event event;
if (SDL_PollEvent(&event) && event.type == SDL_QUIT) {
// do stuff
}
这也可能非常重要,假设我们有两个要求,
a
和b
。要求a
比b
更有可能失败。那么,使用if (a && b)
比if (b && a)
更高效。
&&
表示的顺序非常重要,一个经典而重要的用途是在使用指针之前测试是否为空指针:if (a != 0 && a->b != 0 && a->b->c != 0) { somefunc(a->b->c->d); }
。这个顺序对于避免核心转储非常关键。(为了说明问题,我忽略了洛德法则!) - Jonathan Leffler