Sau*_*ahu 1 c++ language-agnostic logic
我在进行代码审查时发现了这段代码.这段代码中是否有任何隐藏的问题或它是否正常?
myBool = myBoolA || ( oldState == AS_PLAYING ); //code #1
Run Code Online (Sandbox Code Playgroud)
编辑:一个打字错误(myBoolA取代myBool)由我创造了一些令人讨厌的混乱; 我很抱歉.
实际上要审查的代码是:
myBool = myBool || ( oldState == AS_PLAYING ); //code #1, not myBoolA
Run Code Online (Sandbox Code Playgroud)
我建议的代码是:
if( oldState == AS_PLAYING ) myBool = true; //code #2
Run Code Online (Sandbox Code Playgroud)
代码#2 IMO的优点:
myBool是未初始化的,则不会有未定义的行为.myBool = myBoolA || ( oldState == AS_PLAYING ); 绝对没问题.
||是C++中的排序点,因此即使右侧的表达式取决于左侧(可能oldState是对or 的引用),也会定义行为.myBoolmyBoolA
您的建议是将其更改为
if( oldState == AS_PLAYING ) myBool = true;
实际上在功能上myBool是不同的(例如,赋值是不同的),所以不要将其更改为.
最后,请注意,||如果||过载,则可以避免短路特性.所以在重构代码时一定要检查一下.