std::chrono::duration::duration
De cppreference.com
constexpr duration() = default; |
(1) | (desde C++11) |
duration( const duration& ) = default; |
(2) | (desde C++11) |
template< class Rep2 > constexpr explicit duration( const Rep2& r ); |
(3) | (desde C++11) |
template< class Rep2, class Period2 > constexpr duration( const duration<Rep2,Period2>& d ); |
(4) | (desde C++11) |
Construye un nuevo objeto duration a partir de una de varias fuentes de datos opcionales.
1) El constructor por defecto está marcado por defecto (=
default).2) El constructor de copia está marcado por defecto (=
default) (hace una copia bit a bit la cuenta de tics).3) Construye una duración con
r tics. Ten en cuenta que este constructor solo participa en la resolución de sobrecarga si const Rep2& (el tipo de argumento) es implícitamente convertible a rep (el tipo de los tics de esta duración) ystd::chrono::treat_as_floating_point<rep>::valueestrueo,std::chrono::treat_as_floating_point<Rep2>::valueesfalse.
(es decir, una duración con una cuenta de tics de tipo entero no se puede construir a partir de un valor de punto flotante, pero una duración con una cuenta de tics de punto flotante se puede construir a partir de un valor entero)
4) Construye una duración convirtiendo
d a un período apropiado y cuenta de tics, como si fuera std::chrono::duration_cast<duration>(d).count(). Para evitar el truncamiento durante la conversión, este constructor solo participa en la resolución de sobrecarga si el cálculo del factor de conversión (por std::ratio_divide<Period2, Period>) no se desborda y:std::chrono::treat_as_floating_point<rep>::value == true
o tanto:
std::ratio_divide<Period2, period>::den == 1, comostd::chrono::treat_as_floating_point<Rep2>::value == false.
(es decir, la duración usa tics de punto flotante o
Period2 es exactamente divisible por el período)Parámetros
| r | - | Una cuenta de tics |
| d | - | Una duración de la que copiar. |
Ejemplo
El siguiente código muestra varios ejemplos (tanto válidos como no válidos) de cómo construir duraciones:
Ejecuta este código
#include <chrono>
int main()
{
std::chrono::hours h(1); // una hora
std::chrono::milliseconds ms{3}; // 3 milisegundos
std::chrono::duration<int, std::kilo> ks(3); // 3000 segundos
// ERROR: treat_as_floating_point<int>::value == false,
// esta duración solo permite cuentas de tics completas
// std::chrono::duration<int, std::kilo> d3(3.5);
// reloj de 30Hz usando tics fraccionales
std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);
// 3000 microsegundos construidos a partir de 3 milisegundos
std::chrono::microseconds us = ms;
// ERROR: 1/1000000 no es divisible por 1/1000
// std::chrono::milliseconds ms2 = us
std::chrono::duration<double, std::milli> ms2 = us; // 3.0 milisegundos
}
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3050 | C++11 | La restricción de convertibilidad usaba un x-valor no const.
|
Usa l-valores const en su lugar.
|
Véase también
| Asigna el contenido. (función miembro pública) |