请解释这段代码(返回语句)
Please explain this snippet of code (return statement)
我在破译这段代码时遇到了问题。我遇到过像这样复杂的退货声明,有人能帮我分解一下吗?(这个代码来自一个问题,在这个问题中,我必须区分闰年和非闰年(。谢谢
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;
}
相关文章:
- 是否可以解释为什么这会返回 21
- 解释通过从函数引用返回数组的语法
- 解释为什么它不返回它应该返回的内容
- 有人可以解释一下'sizeof'在此代码中返回的结果吗
- 有人可以向我解释什么[](int i){返回i%2 == 0;} 方法
- 返回指针的语句 - 解释它是如何工作的以及为什么
- ob->我应该返回 ob "this" 的地址,但它返回 i ,任何解释?
- 有人可以向我解释为什么我的函数返回 0 而不是 1
- C 如何解释System()的返回值
- 解释C 中三种返回类型的方法
- RVO(返回值优化)无法解释这个谜团
- 众所周知,构造函数没有返回类型,但在下面的代码中,构造函数正在返回..任何人都能解释吗
- 返回模的解释
- 请解释这段代码(返回语句)
- 有人能向我解释一下为什么sizeof函数在下面的代码中返回不同的值
- 为什么QVariant::type()返回一个QVariant::type,而它应该被解释为QMetaType:: ty
- 有人能解释一下这些函数返回类型的区别吗?
- 即使字符串相同,c++ STRCMP也返回0.请解释一下原因
- 调用返回类型不完整的方法和无法解释的模板解决方案
- 解释此C++函数如何返回数组