23 General utilities library [utilities]

23.17 Time utilities [time]

23.17.5 Class template duration [time.duration]

23.17.5.7 duration_­cast [time.duration.cast]

template <class ToDuration, class Rep, class Period> constexpr ToDuration duration_cast(const duration<Rep, Period>& d);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, если ToDuration она не является специализацией duration.

Returns: Да CF будет ratio_­divide<Period, typename ToDuration​::​period>и CR будет common_­type< typename ToDuration​::​rep, Rep, intmax_­t>​::​type.

  • Если CF​::​num == 1 и CF​::​den == 1, возвращает

    ToDuration(static_cast<typename ToDuration::rep>(d.count()))
  • в противном случае, если CF​::​num != 1 и CF​::​den == 1, возвращает

    ToDuration(static_cast<typename ToDuration::rep>(
      static_cast<CR>(d.count()) * static_cast<CR>(CF::num)))
  • в противном случае, если CF​::​num == 1 и CF​::​den != 1, возвращает

    ToDuration(static_cast<typename ToDuration::rep>(
      static_cast<CR>(d.count()) / static_cast<CR>(CF::den)))
  • в противном случае возвращается

    ToDuration(static_cast<typename ToDuration::rep>(
      static_cast<CR>(d.count()) * static_cast<CR>(CF::num) / static_cast<CR>(CF::den)))

[ Note: Эта функция не использует никаких неявных преобразований; все преобразования выполняются с помощью static_­cast. Он избегает умножений и делений, когда во время компиляции известно, что один или несколько аргументов равны 1. Промежуточные вычисления выполняются в самом широком представлении и преобразуются в целевое представление только на последнем шаге. ] end note

template <class ToDuration, class Rep, class Period> constexpr ToDuration floor(const duration<Rep, Period>& d);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, если ToDuration она не является специализацией duration.

Returns: Наибольший результат, t представимый ToDuration для которого t <= d.

template <class ToDuration, class Rep, class Period> constexpr ToDuration ceil(const duration<Rep, Period>& d);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, если ToDuration она не является специализацией duration.

Returns: Наименьший результат, t представимый ToDuration для которого t >= d.

template <class ToDuration, class Rep, class Period> constexpr ToDuration round(const duration<Rep, Period>& d);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, если ToDuration она не является специализацией durationи не treat_­as_­floating_­point_­v<typename ToDuration​::​rep> является false.

Returns: Значение того, ToDuration что ближе всего к d. Если есть два ближайших значения, вернуть то значение, t для которого t % 2 == 0.