【问题标题】:Strange behavior when comparing int in IF statement在 IF 语句中比较 int 时的奇怪行为
【发布时间】:2019-07-21 14:00:10
【问题描述】:

我正在尝试比较 IF 语句中的两个 int 变量。在某些情况下它工作得很好,但在某些情况下会有非常奇怪的行为,至少对我来说是这样。基本上我想在两个变量不相等时返回 true。

在伪代码中:

if (!someMethodToRetrieveInt() == someStructure.intVariable)
    return true;
return false;

在调试时我正在检查局部变量,我确定方法返回的变量和结构成员不相等,但代码仍然返回 false。

这两个是一样的吗?

if (!someMethodToRetrieveInt() == someStructure.intVariable)
    return true;
return false;
if (someMethodToRetrieveInt() != someStructure.intVariable)
    return true;
return false;

【问题讨论】:

  • 你能展示一下someMethodToRetrieveInt()这个方法的样子吗?
  • !someMethodToRetrieveInt() 将导致011someMethodToRetrieveInt() 返回0 时,0 在所有其他时间。然后它将0(或1)与someStructure.intVariable进行比较。因此,仅当intVariable 被限制为01 时它们才相同。它可能不是。

标签: c++ if-statement


【解决方案1】:

不,它们不一样,因为优先级错误! 的优先级高于==。您需要添加一些括号。这两个是一样的

if (!(someMethodToRetrieveInt() == someStructure.intVariable))
    return true;
return false;

if (someMethodToRetrieveInt() != someStructure.intVariable)
    return true;
return false;

两者都一样

return someMethodToRetrieveInt() != someStructure.intVariable;

这将是我的偏好。

初学者通常没有意识到这一点

if (some_boolean_expression)
    return true;
else
    return false;

可以更简单地写成

return some_boolean_expression;

【讨论】:

  • !(a == b)a != b 不同,考虑到运算符重载是一回事。
  • @Ayxan 是的,但在这种情况下,比较似乎在 ints 之间。
  • 重载运算符时,请帮自己一个忙,确保!=!== 给出相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多