我在进行代码审查时发现的这段代码。这段代码中是否有任何隐藏的问题?
myBool = myBoolA || ( oldState == AS_PLAYING ); //code #1
编辑:我一次键入错误(用
myBoolA
代替myBool
)造成了一些令人讨厌的困惑;我真的为此感到抱歉。实际上要检查的代码是:
myBool = myBool || ( oldState == AS_PLAYING ); //code #1, not myBoolA
我建议的代码是:
if( oldState == AS_PLAYING ) myBool = true; //code #2
代码2 IMO的优点:
myBool
,则不会有未定义的行为。 最佳答案
myBool = myBoolA || ( oldState == AS_PLAYING );
绝对可以。||
是C++中的排序点,因此即使右侧的表达式取决于左侧(也许oldState
是myBool
或myBoolA
的引用),也将定义行为。
您的建议将其更改为if( oldState == AS_PLAYING ) myBool = true;
实际上在功能上有所不同(例如,对myBool
的分配是不同的),因此请不要将其更改为该函数。
最后,请注意,如果||
重载,则会避免||
的短路特性。因此,在重构代码时,请务必进行检查。