std::chrono::operator+, std::chrono::operator- (std::chrono::month)
来自cppreference.com
在标头 <chrono> 定义
|
||
constexpr std::chrono::month operator+( const std::chrono::month& m, const std::chrono::months& ms ) noexcept; |
(1) | (C++20 起) |
constexpr std::chrono::month operator+( const std::chrono::months& ms, const std::chrono::month& m ) noexcept; |
(2) | (C++20 起) |
constexpr std::chrono::month operator-( const std::chrono::month& m, const std::chrono::months& ms ) noexcept; |
(3) | (C++20 起) |
constexpr std::chrono::months operator-( const std::chrono::month& m1, const std::chrono::month& m2 ) noexcept; |
(4) | (C++20 起) |
1-2) 将
ms.count()
个月加到 m。通过首先求值 static_cast<long long>(unsigned(m)) + (ms.count() - 1),将它对 12 取余变成 [
0,
11]
范围中的整数,再加 1,来计算结果中保有的月份值。3) 从 m 减去 ms.count() 个月并返回结果。等价于 return m + -ms;。
4) 若 m1.ok() 与 m2.ok() 均为 true,则返回 std::chrono::months 值 m,使得
m.count()
在范围 [
0,
11]
中且 m2 + m == m1。否则返回值未指定。返回值
1-3) 保有按上述方式计算的月份值的 std::chrono::month。
4) 表示 m1 与 m2 间距离的 std::chrono::months。
注意
只要计算不溢出,(1-3) 就始终返回合法的月份,即使 m.ok() 为 false。
两个 month
值相减的结果是 std::chrono::months 类型的时长。时长单位表示格里高利月的平均长度,而产生的时长与操作数所表示的具体月分的日数无关。例如 std::chrono::seconds(std::chrono::April - std::chrono::March) 不是三月中的秒数 (2678400s),而是 2629746s (30.436875 天)。
示例
运行此代码
#include <cassert> #include <chrono> int main() { std::chrono::month m{6}; m = m + std::chrono::months(2); assert(m == std::chrono::month(8)); m = m - std::chrono::months(3); assert(m == std::chrono::month(5)); constexpr std::chrono::months ms = std::chrono::month(8) - std::chrono::month(6); static_assert(ms == std::chrono::months(2)); }
参阅
自增或自减 month (公开成员函数) | |
加上或减去月数 (公开成员函数) |