std::chrono::operator+, std::chrono::operator- (std::chrono::month)
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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) Объект 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));
}
Смотрите также
| инкрементирует или декрементирует месяц (public функция-элемент) | |
| прибавляет или вычитает количество месяцев (public функция-элемент) |