gpt4 book ai didi

c++ - 逻辑或运算符结果作为右值

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:20 25 4
gpt4 key购买 nike

这段代码是我在进行代码审查时发现的。这段代码是不是有什么隐藏的问题,还是刚刚好?

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 的优点:

  1. 更好的可读性
  2. 如果 myBool 未初始化,则不会有未定义的行为。

最佳答案

myBool = myBoolA || ( oldState == AS_PLAYING ); 绝对没问题。

|| 是 C++ 中的排序点,因此即使右侧的表达式依赖于左侧(也许 oldState 是一个 引用 myBoolmyBoolA),将定义行为。

您建议将此更改为

if( oldState == AS_PLAYING ) myBool = true;

实际上在功能上是不同的(例如,对 myBool 的赋值是不同的),所以不要将其更改为那样。

最后,请注意,如果 || 过载,则 || 的短路特性将被避免。所以在重构代码时一定要检查这一点。

关于c++ - 逻辑或运算符结果作为右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com