在 && 语句的后半部分进行无效操作是否安全?
Is it safe to have an invalid operation in the second half of && in an if statement?
这安全吗:
if(sprite->numberOfSides !=0 && sprite->value%sprite->numberOfSides!=0)
如果精灵>边数可以 == 0?
我问的原因是,如果我像这样构建if语句:
if(sprite->value%sprite->numberOfSides!=0 && sprite->numberOfSides !=0)
我得到一个例外(因为你不能 n%0)。将其反转为前一个语句可以正常工作,但是在针对不同设备进行编译时,我不希望遇到麻烦。
是的,它很安全。标准保证短路。
这意味着如果 and (&&
) 表达式的第一部分计算结果为 false
,则保证不会计算第二部分。
从 C++03 - 5.14/1
&&
运算符从左到右分组。[...]如果第一个操作数false
则不计算第二个操作数。
只要
。您谈论内置的&&
运算符,它就是安全的。正如其他答案已经指出的那样,内置运算符的计算是短路的:左操作数总是首先计算,如果它计算为 false
,则甚至不触及右操作数。
但是,当您处理重载运算符&&
时,它的行为与任何其他重载二元运算符一样,这意味着两个操作数都被计算
是的,对于内置类型(如布尔值)。此行为称为短路。发生这种情况是因为 && 实际上是与表达式中的第一个语句关联的函数,尽管它也因其作为运算符的状态而具有特殊语法。在此函数中,通常会检查 null 以及表达式是否为 false。在 && 运算符的情况下,如果布尔值为 false,则这足以停止计算逻辑表达式,并节省计算时间。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如何修复无效的API密钥,IP或操作权限错误?
- glteximage3d抛出错误1282(无效操作)
- 调用 vector.erase() 函数时指针操作无效错误
- 如何在OpenGL中使用纹理?(无效操作错误:1282)
- 无效操作数以二进制读取结构的阵列
- 无故对 glend 的操作无效
- 非逻辑代码流 /无效的向量操作
- Python扩展在操作大列表时会创建无效指针
- glBlitFramebuffer 无效操作
- 省略复制操作后对象无效
- 在 && 语句的后半部分进行无效操作是否安全?
- 无法找出错误原因 跨线程操作从回调到 C# C++无效
- 展开操作期间遇到无效或未对齐的堆栈
- 使用核心配置文件交换缓冲区使用了无效操作
- 如何在不陷入无效输入的情况下重复此操作
- 哪些操作为无效迭代器定义
- 操作无效