我在进行代码审查时发现的这段代码。这段代码中是否有任何隐藏的问题?

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++中的排序点,因此即使右侧的表达式取决于左侧(也许oldStatemyBoolmyBoolA的引用),也将定义行为。

    您的建议将其更改为
    if( oldState == AS_PLAYING ) myBool = true;
    实际上在功能上有所不同(例如,对myBool的分配是不同的),因此请不要将其更改为该函数。

    最后,请注意,如果||重载,则会避免||的短路特性。因此,在重构代码时,请务必进行检查。

    10-08 08:43