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 之間的距離。
[編輯] 注意
只要計算不溢位,即使 m.ok() 是 false,(1-3) 也總是返回一個有效的月份。
兩個 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)); }
[編輯] 參閱
增加或減少月份 (公開成員函式) | |
增加或減少月份數 (公開成員函式) |