Espacios de nombres
Variantes

std::chrono::duration::duration

De cppreference.com
 
 
Biblioteca de servicios
 
 
 
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) y
  • std::chrono::treat_as_floating_point<rep>::value es true o,
  • std::chrono::treat_as_floating_point<Rep2>::value es false.
(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, como
  • std::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:

#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) [editar]