Namespaces
Variants

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

From cppreference.net
定义于头文件 <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));
}

参见

递增或递减月份
(公开成员函数)
增加或减去指定月数
(公开成员函数)