Namespaces
Variants

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

From cppreference.net
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 duration a partir de una de varias fuentes de datos opcionales.

1) El constructor predeterminado.
2) El constructor de copia.
3) Construye una duración con r ticks.
Esta sobrecarga participa en la resolución de sobrecarga solo si se cumplen todas las siguientes condiciones:
  • is_convertible < const Rep2 & , Rep > :: value es true .
  • Se cumple alguna de las siguientes condiciones: [1]
4) Construye una duración convirtiendo d a un período y conteo de ticks apropiados, como si fuera mediante std:: chrono :: duration_cast < duration > ( d ) . count ( ) .
Esta sobrecarga participa en la resolución de sobrecarga solo si no se induce desbordamiento en la conversión, y se cumple alguna de las siguientes condiciones: [2]
  1. Es decir, una duración con un recuento de ticks entero no puede construirse a partir de un valor de punto flotante, pero una duración con un recuento de ticks de punto flotante puede construirse a partir de un valor entero.
  2. Es decir, o la duración utiliza ticks de punto flotante, o Period2 es exactamente divisible por Period .

Contenidos

Parámetros

r - un contador de ticks
d - una duración desde la cual copiar

Ejemplo

El siguiente código muestra varios ejemplos (tanto válidos como inválidos) de cómo construir duraciones:

#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 conteos de ticks enteros
//  std::chrono::duration<int, std::kilo> d3(3.5);
    // Reloj de 30Hz usando ticks fraccionarios
    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 que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2094 C++11 para la sobrecarga (4) , std:: ratio_divide < Period2, period > :: num
podría desbordarse al evaluar
std:: ratio_divide < Period2, period > :: den
la sobrecarga (4) no
participa en la resolución
de sobrecarga en este caso
LWG 3050 C++11 la restricción de convertibilidad usaba xvalue no constante usar lvalues constantes en su lugar

Véase también

asigna los contenidos
(función miembro pública)