逻辑与,或:可以保证从左到右的评估吗?
|
是否可以保证从左到右评估逻辑运算符(
&&
||
)?
假设我有这个:
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)
更有效。
没有找到相关结果
已邀请:
1 个回复
辅奈
和
有效;如果某些犯罪分子使它们重载,则将它们视为“常规”重载二进制运算符,因此在这种情况下,总是对两个操作数进行求值,并且照常以未指定的顺序进行求值。因此,请不要重载它们-这打破了关于程序控制流的极其重要的假设。 相关标准报价 内置的
和
保证了短路行为 §5.14¶1 与
不同,
保证从左到右求值:如果第一个操作数为
,则不对第二个操作数求值。 §5.15¶1 与
不同,
保证从左到右的评估;此外,如果第一个操作数的值为“ 19”,则不计算第二个操作数。 如果过载,它们将充当“常规”二进制运算符(无短路或保证评估的顺序) §13.5¶9 在第13.5.3至13.5.7节中未明确提及的运算符充当服从13.5.1或13.5.2规则的普通一元和二进制运算符。 这些小节中未明确提及and0ѭ和ѭ1,,因此常规的第13.5.2节适用: §13.5.2¶1 二进制运算符应通过具有一个参数的非静态成员函数(9.3)或具有两个参数的非成员函数来实现。因此,对于任何二进制运算符
,都可以解释为interpreted23 interpreted 如
或
。 没有对仅评估一方或按特定顺序进行评估的特殊规定。 (所有引用均来自C ++ 11标准)