std::chrono::operator+, std::chrono::operator- (std::chrono::month)
From 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) ms.count()ヶ月を m から減算し、結果を返します。return m + -ms; と等価です。
4) m1.ok() と m2.ok() が両方とも true の場合、m.count() が
[0, 11] の範囲にあり、かつ m2 + m == m1 となる std::chrono::months 値 m を返します。それ以外の場合、返される値は未指定です。目次 |
[編集] 返り値
1-3) 上記のように計算された月値を含む std::chrono::month。
4) m1 と m2 の間の差を表す std::chrono::months。
[編集] 注意
計算がオーバーフローしない限り、m.ok() が false であっても、(1-3) は常に有効な月を返します。
2つのmonth値を減算した結果は、std::chrono::months 型の期間になります。その期間単位は、平均的なグレゴリオ暦の月の日数を表し、結果の期間は、オペランドによって表される特定の月の実際の日数とは関係ありません。例えば、std::chrono::seconds(std::chrono::April - std::chrono::March) は、3月の日数(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)); }
[編集] 関連項目
| 月をインクリメントまたはデクリメントします (public member function) | |
| 月数を加算または減算します (public member function) |