命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | chrono‎ | month
 
 
 
 
定义于头文件 <chrono>
constexpr std::chrono::month operator+( const std::chrono::month& m,
                                        const std::chrono::months& ms ) noexcept;
(1) (since C++20)
constexpr std::chrono::month operator+( const std::chrono::months& ms,
                                        const std::chrono::month& m ) noexcept;
(2) (since C++20)
constexpr std::chrono::month operator-( const std::chrono::month& m,
                                        const std::chrono::months& ms ) noexcept;
(3) (since C++20)
constexpr std::chrono::months operator-( const std::chrono::month& m1,
                                         const std::chrono::month& m2 ) noexcept;
(4) (since C++20)
1,2)ms.count() 个月添加到 m。结果中保存的月份值通过首先计算 static_cast<long long>(unsigned(m)) + (ms.count() - 1),然后将其模 12 约简为范围 [011] 内的整数,最后加 1 来计算。
3)m 中减去 ms.count() 个月并返回结果。等价于 return m + -ms;
4) 如果 m1.ok()m2.ok() 均为 true,则返回 std::chrono::monthsm,使得 m.count() 在范围 [011] 内,且 m2 + m == m1。否则,返回的值是未指定的。

目录

[编辑] 返回值

1-3) 一个 std::chrono::month,持有如上所述计算的月份值。
4) 一个 std::chrono::months,表示 m1m2 之间的距离。

[编辑] 注释

只要计算不溢出,(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));
}

[编辑] 参见

递增或递减月份
(公共成员函数) [编辑]
添加或减去若干个月
(公共成员函数) [编辑]