识别C++代码问题

Identifying C++ code problems

本文关键字:问题 代码 C++ 识别      更新时间:2023-10-16

这是什么意思?

我无法理解这一点,因为我没有使用这种格式。

任何人都可以翻译这个条件吗?

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);

这是两个三元运算符。三元运算符将 if-else 语句压缩到一行中。 (expression ? fireOnTrue() : fireOnFalse()) 例如

if(D == 4) {
    explode();
} else {
    explodeTwice();
}

可以写成:

D == 4 ? explode() : explodeTwice()

因此,如果我们拿(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);并分解它,我们会得到:

if(D == 4) {
    (i % 2 == 0 ? 10 : 14);
} else
    10;
}

再分解一步,我们就可以得到:

if(D == 4) {
    if(i % 2 == 0) {
        10;
    } else {
        14;
    }
} else
    10;
}

让我们逐一介绍那个怪物。

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)

此行使用三元运算符 x ? y : z ,返回

  • y如果x == true
  • z如果x == false

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)首先检查D是否等于4

  • 如果D等于4则返回(i % 2 == 0 ? 10 : 14)
  • 如果D不等于4则返回10

如果D恰好等于4则表达式(i % 2 == 0 ? 10 : 14)将被解析:

(i % 2 == 0 ? 10 : 14)首先检查i % 2 == 0是真还是假。 % 是余数又名模运算符,它返回 a % b 的除法 a/b 的余数。

将该结果与0进行比较等同于说"平均划分",即没有余数。

除以2的余数可以是01,因此:

  • 0 i是否为偶数
  • 1如果i是奇数

换句话说,如果i是偶数,(i % 2 == 0 ? 10 : 14)将返回10,如果i是奇数,则返回14


总之,(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10) 根据Di,可以评估为 1014,如下所示:

  • 如果D == 4i是偶数,则计算结果为10
  • 如果D == 4i是奇数,则计算结果为14
  • 如果D != 4,则计算结果为 10

因此,表达式可以简化为以下方法:

int return10or14(int D, int i) {
    if (D != 4 || i % 2 == 0)
        return 10;
    else
        return 14;
}
表达式 a

? b:c 只是表示 if(a( 那么 b ,否则 c。因此,假设您的表达式计算结果为 retval,它可以写成:

if(D == 4)
{
    if(i%2 == 0) 
      retval = 10;
    else 
      retval = 14;
}
else  retval = 10;