请解释这段代码(返回语句)

Please explain this snippet of code (return statement)

本文关键字:解释 返回 语句 代码 段代码      更新时间:2023-10-16

我在破译这段代码时遇到了问题。我遇到过像这样复杂的退货声明,有人能帮我分解一下吗?(这个代码来自一个问题,在这个问题中,我必须区分闰年和非闰年(。谢谢

return ((year % 4) || (!(year % 100) && ((year+300) % 400))) ? 28 : 29;

它只是一个条件表达式condition ? true_value : false_value

如果你把条件分开,它会变得更清楚:

bool not_leap_year = (year % 4) || (!(year % 100) && ((year+300) % 400)); 
return not_leap_year ? 28 : 29;

不过,计算条件的否定更为常见,因为当闰年时的规则比不存在的规则更为人所知(因此出现错误的可能性较小(。

bool leap_year = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
return leap_year ? 29 : 28;
((year % 4) || (!(year % 100) && ((year+300) % 400))) ? 28 : 29;

这是具有相对复杂布尔表达式的三元运算符?。你可以用if表达式实现同样的效果:

if ( (year % 4) // year not dividable by 4
     or
     (
        not (year % 100) // year dividable by 100
        and
        ((year+300) % 400))) // year + 300 not dividable by 400
{
  return 28;
}
else
{
  return 29;
}

使用辅助函数可以使其可读性更强

bool dividableBy(unsigned value, unsigned divisor) {
  return value % divisor == 0;
}
//...
if ((not dividableBy(year, 4)) or
    (dividableBy(year, 100) and
     (not dividableBy(year+300, 400)))) {
  return 28;
}
else {
  return 29;
}