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]
-
- std:: chrono :: treat_as_floating_point < Rep > :: value равно true .
- std:: chrono :: treat_as_floating_point < Rep2 > :: value равно false .
4)
Создает продолжительность путем преобразования
d
в соответствующий период и количество тактов, как если бы с помощью
std::
chrono
::
duration_cast
<
duration
>
(
d
)
.
count
(
)
.
Эта перегрузка участвует в разрешении перегрузки только если не возникает переполнения при преобразовании и выполняется любое из следующих условий:
[2]
- std:: chrono :: treat_as_floating_point < Rep > :: value равно true .
- Выполняются все следующие условия:
-
- std:: ratio_divide < Period2, Period > :: den равно 1 .
- std:: chrono :: treat_as_floating_point < Rep2 > :: value равно false .
- ↑ То есть, длительность с целочисленным счетчиком тактов не может быть создана из значения с плавающей запятой, но длительность с счетчиком тактов с плавающей запятой может быть создана из целочисленного значения.
-
↑
То есть, либо длительность использует такты с плавающей запятой, либо
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) |