Определение класса
template <1> >
class duration {
public:
typedef Rep rep;
typedef Period period;
constexpr duration() = default;
~duration() = default;
duration(const duration&) = default;
duration& operator=(const duration&) = default;
template
constexpr explicit duration(const Rep2& r);
template
constexpr duration(const duration& d);
constexpr rep count() const;
constexpr duration operator+() const;
constexpr duration operator-() const;
duration& operator++();
duration operator++(int);
duration& operator--();
duration operator--(int);
duration& operator+=(const duration& d);
duration& operator-=(const duration& d);
duration& operator*=(const rep& rhs);
duration& operator/=(const rep& rhs);
duration& operator%=(const rep& rhs);
duration& operator%=(const duration& rhs);
static constexpr duration zero();
static constexpr duration min();
static constexpr duration max();
};
template
constexpr bool operator==(
const duration& lhs,
const duration& rhs);
template
constexpr bool operator !=(
const duration& lhs,
const duration& rhs);
template
constexpr bool operator<(
const duration& lhs,
const duration& rhs);
template
constexpr bool operator<=(
const duration& lhs,
const duration& rhs);
template
constexpr bool operator>(
const duration& lhs,
const duration& rhs);
template
constexpr bool operator>=(
const duration& lhs,
const duration& rhs);
template
constexpr ToDuration duration_cast(
const duration& d);
Требования
Rep
должен быть встроенным числовым типом или определенным пользователем типом со свойствами числа. Period
должен быть конкретизацией шаблона std::ratio<>
.
STD::CHRONO::DURATION::REP, TYPEDEF
Это псевдоним типа для хранения числа тиков в значении duration
.
Объявление
typedef Rep rep;
rep
— тип значения, используемого для хранения внутреннего представления объекта duration
.
STD::CHRONO::DURATION::PERIOD, TYPEDEF
Это псевдоним типа для конкретизации шаблона класса std::ratio
, которая задает количество долей секунды, представляемых счетчиком интервала. Например, если period
— это std::ratio<1, 50>
, то объект duration
, для которого count()
равно N , представляет N пятидесятых долей секунды.
Объявление
typedef Period period;
STD::CHRONO::DURATION
, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует экземпляр std::chrono::duration
со значением по умолчанию.
Объявление
constexpr duration() = default;
Результат
Внутреннее значение duration
(типа rep
) инициализируется значением по умолчанию.
STD::CHRONO::DURATION
, КОНВЕРТИРУЮЩИЙ КОНСТРУКТОР ИЗ ЗНАЧЕНИЯ СЧЕТЧИКА
Конструирует экземпляр std::chrono::duration
с заданным значением счетчика.
Объявление
template
constexpr explicit duration(const Rep2& r);
Результат
Внутреннее значение объекта duration
инициализируется значением static_cast(r)
.
Требования
Этот конструктор участвует в разрешении перегрузки, только если Rep2
может быть неявно преобразован в Rep
, и либо Rep
— тип с плавающей точкой, либо Rep2
не является типом с плавающей точкой.
Постусловие
this->count() == static_cast(r)
STD::CHRONO::DURATION
, КОНВЕРТИРУЮЩИЙ КОНСТРУКТОР ИЗ ДРУГОГО ЗНАЧЕНИЯ STD::CHRONO::DURATION
Конструирует экземпляр std::chrono::duration
, масштабируя значение счетчика другого объекта std::chrono::duration
.
Объявление
template
constexpr duration(const duration& d);
Результат
Внутреннее значение объекта duration
инициализируется значением duration_cast>(d).count()
.
Требования
Этот конструктор участвует в разрешении перегрузки, только если Rep
— тип с плавающей точкой, либо Rep2
не является типом с плавающей точкой, и Period2
— целое кратное Period
(то есть ratio_divide::den == 1
). Это позволяет избежать случайного обрезания (и, значит, потери точности) при сохранении интервала с меньшим периодом в переменной, представляющий интервал с большим периодом.
Постусловие
this->count() == duration_cast>(d).count()
Примеры
duration< int, ratio<1, 1000>> ms(5); ←
5 миллисекунд
duration<1,1>> s(ms);←┐
Ошибка: нельзя
│
сохранить мс как
│
целые секунды
duration<1, 1>> s2(ms);←┐
Правильно:
│
s2.count() == 0.005
duration<1, 1000000>> us(ms);←┐
Правильно:
Читать дальше