【发布时间】:2017-03-03 12:38:18
【问题描述】:
我与一些同事对以下代码存在分歧:
int foo ( int a, int b )
{
return b > 0 ? a / b : a;
}
此代码是否表现出未定义的行为?
编辑:分歧始于过度渴望优化编译器中的一个错误,其中b > 0 检查已被优化。
【问题讨论】:
-
有什么理由这么认为吗?
-
我的意思是当你执行除以0时它只是UB。你不在这里。
-
@LuchianGrigore 我猜他的意思是,如果你的同事(或你)采取这个展示 UB 的立场,也许他们(或你)会这样认为的原因为什么成为您问题的一个有价值的补充。
-
嗯?当
p为空时是return p ? p->flag_value : falseUB?不会。如果是这种情况,所有代码都会被破坏。 -
如果操作产生溢出也是UB。但是对于只有将 INT_MIN 除以 -1 时才会发生的整数除法,并且保护 (b>0) 也可以避免这种情况。
标签: c++ c language-lawyer