请解释这段代码(return语句)

时间:2015-09-22 12:30:47

标签: c++ c++11

我无法破译这段代码。我遇到了像这样复杂的退货声明,有人可以为我分解吗? (此代码来自我必须区分闰年和非闰年的问题)。谢谢!

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

2 个答案:

答案 0 :(得分:3)

这只是一个条件表达式,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;

答案 1 :(得分:1)

False

这是具有相对复杂的布尔表达式的三元运算符((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;
}