Tag: C++ STL

C++ <chrono> 库中的高效闰年判断算法解析


在 C++ <chrono> 库中,有如下判断闰年的算法:

class year
{
private:
	short _M_y;

public:
	constexpr bool
	is_leap() const noexcept
	{
		return (_M_y & (_M_y % 25 == 0 ? 15 : 3)) == 0;
	}
};

根据源代码的注释,总结一下优化思路:

判断闰年的规则是:

  • 如果年份能被 4 整除且不能被 100 整除,则是闰年.
  • 如果年份能被 100 整除,则还必须能被 400 整除,才是闰年.

先判断能否被 100 整除比其他思路更快,因为它减少了不必要的计算. 参考这里.

[...]