Namespaces
Variants

std::chrono::duration<Rep,Period>:: duration

From cppreference.net
constexpr duration ( ) = default ;
(1) (начиная с C++11)
duration ( const duration & ) = default ;
(2) (начиная с C++11)
template < class Rep2 >
constexpr explicit duration ( const Rep2 & r ) ;
(3) (начиная с C++11)
template < class Rep2, class Period2 >
constexpr duration ( const duration < Rep2, Period2 > & d ) ;
(4) (начиная с C++11)

Создает новый duration из одного из нескольких возможных источников данных.

1) Конструктор по умолчанию.
2) Конструктор копирования.
3) Создает длительность с r тактами.
Эта перегрузка участвует в разрешении перегрузки только при выполнении всех следующих условий:
  • is_convertible < const Rep2 & , Rep > :: value равно true .
  • Выполняется любое из следующих условий: [1]
4) Создает продолжительность путем преобразования d в соответствующий период и количество тактов, как если бы с помощью std:: chrono :: duration_cast < duration > ( d ) . count ( ) .
Эта перегрузка участвует в разрешении перегрузки только если не возникает переполнения при преобразовании и выполняется любое из следующих условий: [2]
  1. То есть, длительность с целочисленным счетчиком тактов не может быть создана из значения с плавающей запятой, но длительность с счетчиком тактов с плавающей запятой может быть создана из целочисленного значения.
  2. То есть, либо длительность использует такты с плавающей запятой, либо Period2 точно делится на Period .

Содержание

Параметры

r - количество тактов
d - длительность для копирования

Пример

Следующий код показывает несколько примеров (как корректных, так и некорректных) создания объектов duration:

#include <chrono>
int main()
{
    std::chrono::hours h(1); // один час
    std::chrono::milliseconds ms{3}; // 3 миллисекунды
    std::chrono::duration<int, std::kilo> ks(3); // 3000 секунд
    // ошибка: treat_as_floating_point<int>::value == false,
    // Эта duration допускает только целые значения тактов
//  std::chrono::duration<int, std::kilo> d3(3.5);
    // 30Гц тактование с использованием дробных тактов
    std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);
    // 3000 микросекунд, созданных из 3 миллисекунд
    std::chrono::microseconds us = ms;
    // ошибка: 1/1000000 не делится нацело на 1/1000
//  std::chrono::milliseconds ms2 = us
    std::chrono::duration<double, std::milli> ms2 = us; // 3.0 миллисекунды
}

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2094 C++11 for overload (4) , std:: ratio_divide < Period2, period > :: num
might overflow when evaluating
std:: ratio_divide < Period2, period > :: den
overload (4) does not
participate in overload
resolution in this case
LWG 3050 C++11 convertibility constraint used non-const xvalue use const lvalues instead

Смотрите также

присваивает содержимое
(public member function)