【问题标题】:How can this if statement be simplified?如何简化这个 if 语句?
【发布时间】:2019-10-06 04:35:35
【问题描述】:

我正在使用 CLion IDE 对我的 C++ 项目进行编码。有时,IDE 会尝试比我更聪明并给我建议。我在代码检查期间遇到了一个简单的问题(由 CLion 提供)。它说可以简化以下代码,尽管我相信这是我能想到的最简单的形式:

代码:

    if (node.first >= 0 && node.first <= 45 &&
    node.second >= 0 && node.second <= 30)
    return true;
    else
    return false;

假设节点的类型为std::pair&lt;int, int&gt;

我从 CLion IDE 得到的建议如下:

代码检查 cmets:

Inspection info: This inspection finds the part of the code that can be simplified, e.g. constant conditions, identical if branches, pointless boolean expressions, etc.

你认为这可以更简化吗?

【问题讨论】:

  • 您有else 子句吗?
  • 您确定成员不是无符号类型?
  • 也许可以推断出这些条件之一总是/从不成立?
  • 为什么“假设”节点的类型是 std::pair
  • 这些检查通常带有将代码重构为替代形式的选项。你确定它没有给你那个选择吗?其实it does for me with this example,确实改写成答案中的形式了。

标签: c++ if-statement conditional-statements std-pair code-inspection


【解决方案1】:

CLion 是在暗示你这一点...

if (node.first >= 0 && node.first <= 45 &&
    node.second >= 0 && node.second <= 30)
    return true;
else
    return false;

可以改写为

return node.first  >= 0 && node.first  <= 45 &&
       node.second >= 0 && node.second <= 30;

由于在控制语句中用作条件的表达式显然会自然地转换为真假。

【讨论】:

  • 你是对的。我有一个这样的 else 声明。但是 IDE 仅突出显示了警告的 if 语句,而排除了 else 语句。所以我认为这只是 if 语句的问题,并在此处发布以符合Minimal and reproducible example
  • @ArunKumar 您是否确认即使您删除了else 部分,您仍然可以获得高亮显示?如果不是,那么您没有发布可重现的示例。如果是这样,这个答案不是正确的答案。
  • @DavidSchwartz 我意识到这个答案对于我的问题是 100% 正确的。在认为问题仅出在 if 语句之前,我没有发布 else 语句。但后来当我意识到真正的问题时,我编辑了我的帖子。
猜你喜欢
  • 2022-08-10
  • 1970-01-01
  • 2020-03-15
  • 2021-11-20
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多