std::chrono:: duration_cast
|
Definido en el encabezado
<chrono>
|
||
|
template
<
class
ToDuration,
class
Rep,
class
Period
>
constexpr ToDuration duration_cast ( const std:: chrono :: duration < Rep, Period > & d ) ; |
(desde C++11) | |
Convierte una
std::chrono::duration
a una duración de tipo diferente
ToDuration
.
La función solo participa en la resolución de sobrecarga si
ToDuration
es una especialización de
std::chrono::duration
.
Sea
-
ToRepsea typename ToDuration :: rep , -
ToPeriodsea typename ToDuration :: period , -
CFsea std:: ratio_divide < Period, ToPeriod > , -
CRsea std:: common_type < Rep, ToRep, std:: intmax_t > :: type , - cr_count sea static_cast < CR > ( d. count ( ) ) ,
- cr_num sea static_cast < CR > ( CF :: num ) , y
- cr_den sea static_cast < CR > ( CF :: den ) ,
el resultado es:
| CF :: num | |||
|---|---|---|---|
| 1 | no 1 | ||
| CF :: den | 1 |
ToDuration
(
static_cast
<
ToRep
>
( d. count ( ) ) ) |
ToDuration
(
static_cast
<
ToRep
>
( cr_count * cr_num ) ) |
| no 1 |
ToDuration
(
static_cast
<
ToRep
>
( cr_count / cr_den ) ) |
ToDuration
(
static_cast
<
ToRep
>
( cr_count * cr_num / cr_den ) ) |
|
Contenidos |
Parámetros
| d | - | duración a convertir |
Valor de retorno
d
convertido a una duración de tipo
ToDuration
.
Notas
No se utilizan conversiones implícitas. Las multiplicaciones y divisiones se evitan cuando es posible, si se conoce en tiempo de compilación que uno o más parámetros son 1 . Los cálculos se realizan en el tipo más amplio disponible y se convierten, como si fuera mediante static_cast , al tipo de resultado solo cuando finalizan.
La conversión entre duraciones enteras donde el período fuente es exactamente divisible por el período destino (por ejemplo, de horas a minutos) o entre duraciones de punto flotante puede realizarse con conversiones ordinarias o implícitamente mediante los
std::chrono::duration
constructores
, no se necesita
duration_cast
.
La conversión de una duración de punto flotante a una duración entera está sujeta a comportamiento indefinido cuando el valor de punto flotante es NaN, infinito, o demasiado grande para ser representable por el tipo entero de destino. De lo contrario, la conversión a una duración entera está sujeta a truncamiento como con cualquier static_cast a un tipo entero.
Ejemplo
Este ejemplo mide el tiempo de ejecución de una función.
#include <chrono> #include <iostream> #include <ratio> #include <thread> void f() { std::this_thread::sleep_for(std::chrono::seconds(1)); } int main() { const auto t1 = std::chrono::high_resolution_clock::now(); f(); const auto t2 = std::chrono::high_resolution_clock::now(); // floating-point duration: no duration_cast needed const std::chrono::duration<double, std::milli> fp_ms = t2 - t1; // integral duration: requires duration_cast const auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1); // converting integral duration to integral duration of // shorter divisible time unit: no duration_cast needed const std::chrono::duration<long, std::micro> int_usec = int_ms; std::cout << "f() took " << fp_ms << ", or " << int_ms << " (whole milliseconds), or " << int_usec << " (whole microseconds)\n"; }
Salida posible:
f() took 1000.14ms, or 1000ms (whole milliseconds), or 1000000us (whole microseconds)
Véase también
|
(C++11)
|
un intervalo de tiempo
(plantilla de clase) |
|
(C++11)
|
convierte un punto temporal a otro punto temporal en el mismo reloj, con una duración diferente
(plantilla de función) |
|
(C++17)
|
convierte una duración a otra, redondeando hacia abajo
(plantilla de función) |
|
(C++17)
|
convierte una duración a otra, redondeando hacia arriba
(plantilla de función) |
|
(C++17)
|
convierte una duración a otra, redondeando al más cercano, empates al par
(plantilla de función) |