std::chrono::operator+, std::chrono::operator- (std::chrono::month)
Определено в заголовке <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, возвращает значение std::chrono::months m, такое, что m.count() находится в диапазоне [0, 11] и m2 + m == m1. В противном случае возвращаемое значение не определено.Возвращаемое значение
1-3) A
std::chrono::month содержащее значение месяца, вычисленное, как описано выше.
4) A
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));
}См. также
| инкрементирует или декрементирует месяц (публичный член-функция) |
|
| добавляет или вычитает число месяцев (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/chrono/month/operator_arith_2