|| 的 C++ 排序and && 在 if 语句中测试相等性时

标签 c++ if-statement

这是一个非常简单的问题,我找不到答案。

我正在尝试编写一个函数,当传递两个左边优先级更高的字符时返回一个 bool 值。

我可以通过以下方式实现所需的功能:

bool Precedence(char lhs, char rhs) {
  if ((lhs == '*' || lhs == '/') && (rhs == '+' || rhs == '-'))
    return true;
  return false;
}

这很好,但为什么下面的不完全一样:

bool Precedence(char lhs, char rhs) {
  if ((lhs == ('*' || '/')) && (rhs == ('+' || '-')))
    return true;
  return false;
}

我知道这是错误的,但为什么呢?对我来说,他们都读得一样。抱歉,我知道这很愚蠢,但这让我发疯。

最佳答案

C++ 没有定义这样的逻辑运算符。

lhs == ('*' || '/') 并不意味着 lhs 等于 * 或/,它返回 true 如果lhs1

('*' || '/') 子表达式无条件求值为 true,因为 char 上的 bool 逻辑类似于检查它们是否为 0。现在您的表达式看起来像 lhs == truelhs == 1

关于|| 的 C++ 排序and && 在 if 语句中测试相等性时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269809/

相关文章:

c++ - 声明具有用户输入大小的对象数组

java - 一个 "if"语句中范围内的任一整数

Java决策问题

bash: `set -e` 在 if 表达式中使用时不起作用?

javascript - JS点击事件取决于div宽度

c++ - 虚函数是否不太可能导致堆栈溢出?

c++ Derived Default复制构造函数用什么初始化Base复制构造函数?

c++ - ATL CString 到字符数组的转换

java - 如何使 if/else 语句读取第一个匹配的关键字? ( java )

c++ - 如何清除 NEON 中除第一个非零车道外的所有车道?