std::chrono::operator+, std::chrono::operator- (std::chrono::month)
Von cppreference.com
| Definiert in Header <chrono> |
||
| constexpr std::chrono::month operator+( const std::chrono::month& m, const std::chrono::months& ms ) noexcept; |
(1) | (seit C++20) |
| constexpr std::chrono::month operator+( const std::chrono::months& ms, const std::chrono::month& m ) noexcept; |
(2) | (seit C++20) |
| constexpr std::chrono::month operator-( const std::chrono::month& m, const std::chrono::months& ms ) noexcept; |
(3) | (seit C++20) |
| constexpr std::chrono::months operator-( const std::chrono::month& m1, const std::chrono::month& m2 ) noexcept; |
(4) | (seit C++20) |
1,2) Addiert ms.count() Monate zu m. Der Monatswert im Ergebnis wird berechnet, indem zuerst static_cast<long long>(unsigned(m)) + (ms.count() - 1) ausgewertet, dieses modulo 12 auf eine Ganzzahl im Bereich
[0, 11] reduziert und dann 1 addiert wird.3) Subtrahiert ms.count() Monate von m und gibt das Ergebnis zurück. Entspricht return m + -ms;.
4) Wenn m1.ok() und m2.ok() beide true sind, wird ein std::chrono::months-Wert m zurückgegeben, sodass m.count() im Bereich
[0, 11] liegt und m2 + m == m1 gilt. Andernfalls ist der zurückgegebene Wert nicht spezifiziert.Inhalt |
[bearbeiten] Rückgabewert
1-3) Ein std::chrono::month, der einen wie oben beschriebenen Monats-Wert enthält.
4) Ein std::chrono::months, der die Distanz zwischen m1 und m2 repräsentiert.
[bearbeiten] Hinweise
Solange die Berechnung nicht überläuft, geben (1-3) immer einen gültigen Monat zurück, auch wenn m.ok() false ist.
Das Ergebnis der Subtraktion zweier month-Werte ist eine Dauer vom Typ std::chrono::months. Diese Einheiten repräsentieren die Länge des durchschnittlichen gregorianischen Monats, und die resultierende Dauer hat keine Beziehung zur Anzahl der Tage in den bestimmten Monaten, die von den Operanden repräsentiert werden. Zum Beispiel ist std::chrono::seconds(std::chrono::April - std::chrono::March) nicht die Anzahl der Sekunden im März (2678400s), sondern 2629746s (30,436875 Tage).
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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)); }
[bearbeiten] Siehe auch
| inkrementiert oder dekrementiert den Monat (public member function) | |
| addiert oder subtrahiert eine Anzahl von Monaten (public member function) |