std::chrono:: duration_cast
|
Definiert im Header
<chrono>
|
||
|
template
<
class
ToDuration,
class
Rep,
class
Period
>
constexpr ToDuration duration_cast ( const std:: chrono :: duration < Rep, Period > & d ) ; |
(seit C++11) | |
Konvertiert eine
std::chrono::duration
zu einer Dauer eines anderen Typs
ToDuration
.
Die Funktion nimmt nur dann an der Überladungsauflösung teil, wenn
ToDuration
eine Spezialisierung von
std::chrono::duration
ist.
Sei
-
ToRepsei typename ToDuration :: rep , -
ToPeriodsei typename ToDuration :: period , -
CFsei std:: ratio_divide < Period, ToPeriod > , -
CRsei std:: common_type < Rep, ToRep, std:: intmax_t > :: type , - cr_count sei static_cast < CR > ( d. count ( ) ) ,
- cr_num sei static_cast < CR > ( CF :: num ) , und
- cr_den sei static_cast < CR > ( CF :: den ) ,
das Ergebnis ist:
| CF :: num | |||
|---|---|---|---|
| 1 | nicht 1 | ||
| CF :: den | 1 |
ToDuration
(
static_cast
<
ToRep
>
( d. count ( ) ) ) |
ToDuration
(
static_cast
<
ToRep
>
( cr_count * cr_num ) ) |
| nicht 1 |
ToDuration
(
static_cast
<
ToRep
>
( cr_count / cr_den ) ) |
ToDuration
(
static_cast
<
ToRep
>
( cr_count * cr_num / cr_den ) ) |
|
Inhaltsverzeichnis |
Parameter
| d | - | umzuwandelnde Dauer |
Rückgabewert
d
in eine Dauer vom Typ
ToDuration
konvertiert.
Hinweise
Es werden keine impliziten Konvertierungen verwendet. Multiplikationen und Divisionen werden nach Möglichkeit vermieden, wenn zur Kompilierzeit bekannt ist, dass ein oder mehrere Parameter 1 sind. Berechnungen werden im breitesten verfügbaren Typ durchgeführt und erst nach Abschluss, als ob durch static_cast , in den Ergebnistyp konvertiert.
Das Umwandeln zwischen ganzzahligen Zeitdauern, bei denen die Quellperiode genau durch die Zielperiode teilbar ist (z.B. Stunden in Minuten), oder zwischen Gleitkomma-Zeitdauern kann mit gewöhnlichen Casts oder implizit über
std::chrono::duration
Konstruktoren
erfolgen, kein
duration_cast
ist erforderlich.
Die Umwandlung von einer Gleitkomma-Dauer in eine Ganzzahldauer ist undefiniertem Verhalten unterworfen , wenn der Gleitkommawert NaN, unendlich oder zu groß für die Darstellung durch den ganzzahligen Zieltyp ist. Andernfalls unterliegt die Umwandlung in eine Ganzzahldauer einer Abschneidung wie bei jeder static_cast auf einen Ganzzahltyp.
Beispiel
Dieses Beispiel misst die Ausführungszeit einer Funktion.
#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"; }
Mögliche Ausgabe:
f() took 1000.14ms, or 1000ms (whole milliseconds), or 1000000us (whole microseconds)
Siehe auch
|
(C++11)
|
ein Zeitintervall
(Klassentemplate) |
|
(C++11)
|
konvertiert einen Zeitpunkt zu einem anderen Zeitpunkt auf derselben Uhr, mit einer anderen Dauer
(Funktionstemplate) |
|
(C++17)
|
konvertiert eine Dauer zu einer anderen, abrundend
(Funktionstemplate) |
|
(C++17)
|
konvertiert eine Dauer zu einer anderen, aufrundend
(Funktionstemplate) |
|
(C++17)
|
konvertiert eine Dauer zu einer anderen, rundend zur nächsten, bei Gleichheit zur geraden Zahl
(Funktionstemplate) |