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) 一个 std::chrono::months,它代表 m1 和 m2 之间的距离。
[编辑] 备注
只要计算不会溢出,(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)); }
[编辑] 参见
递增或递减月份 (公共成员函数) | |
添加或减去若干个月 (公共成员函数) |