std::chrono::operator+, std::chrono::operator- (std::chrono::month)

来自cppreference.com
< cpp‎ | chrono‎ | month
 
 
 
 
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::monthsm ,使得 m.count() 在范围 [0, 11] 中且 m2 + m == m1 。否则返回值未指定。

返回值

1-3) 保有按上述方式计算的月份值的 std::chrono::month
4) 表示 m1m2 间距离的 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 days) 。

示例

#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
(公开成员函数)
加或减月数
(公开成员函数)