std::chrono::duration
| Definiert in Header <chrono> |
||
| template< class Rep, |
(seit C++11) | |
Die Klasse std::chrono::duration repräsentiert ein Zeitintervall.
Sie besteht aus einer Anzahl von Ticks vom Typ Rep und einer Tick-Periode, wobei die Tick-Periode ein rationaler Bruch zur Kompilierzeit ist, der die Zeit in Sekunden von einem Tick zum nächsten repräsentiert (fraction).
Die einzige in einer duration gespeicherte Information ist die Tick-Anzahl vom Typ Rep. Wenn Rep ein Fließkommatyp ist, kann die duration Bruchteile von Ticks darstellen. Period ist Teil des Typs der duration und wird nur beim Konvertieren zwischen verschiedenen durations verwendet.
Inhalt |
[edit] Member types
| Mitgliedertyp | Definition |
rep
|
Rep, ein arithmetischer Typ oder eine Klasse, die einen arithmetischen Typ emuliert, der die Anzahl der Ticks repräsentiert. |
period
|
Period(bis C++17)typename Period::type(seit C++17), ein std::ratio, der die Tick-Periode repräsentiert (d.h. die Anzahl der Sekundenbruchteile pro Tick). |
[edit] Member functions
| erstellt eine neue duration (public member function) | |
| weist den Inhalt zu (public member function) | |
| gibt die Anzahl der Ticks zurück (public member function) | |
| [static] |
gibt den speziellen duration-Wert null zurück (public static member function) |
| [static] |
gibt den speziellen duration-Wert min zurück (public static member function) |
| [static] |
gibt den speziellen duration-Wert max zurück (public static member function) |
| implementiert unäres + und unäres - (public member function) | |
| inkrementiert oder dekrementiert die Tick-Anzahl (public member function) | |
| implementiert zusammengesetzte Zuweisung zwischen zwei durations (public member function) |
[edit] Non-member functions
| implementiert arithmetische Operationen mit Dauern als Argumente (Funktionstemplate) | |
| (C++11)(C++11)(entfernt in C++20)(C++11)(C++11)(C++11)(C++11)(C++20) |
vergleicht zwei Dauern (Funktionstemplate) |
| (C++11) |
konvertiert eine Dauer in eine andere mit einem anderen Tick-Intervall (Funktionstemplate) |
| (C++17) |
konvertiert eine Dauer in eine andere und rundet ab (Funktionstemplate) |
| (C++17) |
konvertiert eine Dauer in eine andere und rundet auf (Funktionstemplate) |
| (C++17) |
konvertiert eine Dauer in eine andere, rundet auf die nächste, bei Gleichstand zu geraden Zahlen (Funktionstemplate) |
| (C++17) |
ermittelt den Absolutwert der duration (function template) |
| (C++20) |
führt die Stream-Ausgabe auf einer duration durch(function template) |
| (C++20) |
parst eine duration aus einem Stream gemäß dem angegebenen Format(function template) |
[edit] Hilfstypen
Ein Typ /* intXX */, der in der folgenden Tabelle verwendet wird, bedeutet einen vorzeichenbehafteten Integer-Typ mit mindestens XX Bits.
| Typ | Definition |
std::chrono::nanoseconds
|
std::chrono::duration</* int64 */, std::nano> |
std::chrono::microseconds
|
std::chrono::duration</* int55 */, std::micro> |
std::chrono::milliseconds
|
std::chrono::duration</* int45 */, std::milli> |
std::chrono::seconds
|
std::chrono::duration</* int35 */> |
std::chrono::minutes
|
std::chrono::duration</* int29 */, std::ratio<60>> |
std::chrono::hours
|
std::chrono::duration</* int23 */, std::ratio<3600>> |
std::chrono::days (seit C++20) |
std::chrono::duration</* int25 */, std::ratio<86400>> |
std::chrono::weeks (seit C++20) |
std::chrono::duration</* int22 */, std::ratio<604800>> |
std::chrono::months (seit C++20) |
std::chrono::duration</* int20 */, std::ratio<2629746>> |
std::chrono::years (seit C++20) |
std::chrono::duration</* int17 */, std::ratio<31556952>> |
Hinweis: Jeder der vordefinierten duration-Typen bis einschließlich hours deckt einen Bereich von mindestens ±292 Jahren ab.
|
Jeder der vordefinierten duration-Typen |
(seit C++20) |
[edit] Helper classes
| spezialisiert den std::common_type-Trait (Klassentemplate-Spezialisierung) | |
| (C++11) |
zeigt an, dass eine duration in eine duration mit anderer Tick-Periode konvertierbar ist (class template) |
| (C++11) |
erstellt Null-, Min- und Max-Werte eines Tick-Zählers gegebenen Typs (class template) |
Formatierungsunterstützung für duration(Klassentemplate-Spezialisierung) | |
| Hash-Unterstützung für std::chrono::duration (Klassentemplate-Spezialisierung) |
[edit] Helper specializations
| template< class Rep, class Period > constexpr bool enable_nonlocking_formatter_optimization<chrono::duration<Rep, Period>> |
(seit C++23) | |
Diese Spezialisierung von std::enable_nonlocking_formatter_optimization ermöglicht eine effiziente Implementierung von std::print und std::println zum Drucken eines chrono::duration-Objekts, wenn der Template-Parameter Rep dies zulässt.
[edit] Literale
| Definiert im Inline-Namespace
std::literals::chrono_literals | |
| (C++14) |
ein std::chrono::duration Literal, das Stunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Minuten repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Sekunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Millisekunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Mikrosekunden repräsentiert (Funktion) |
| (C++14) |
ein std::chrono::duration Literal, das Nanosekunden repräsentiert (Funktion) |
|
Hinweis: Die Suffixe |
(seit C++20) |
[edit] Anmerkungen
Das tatsächliche Zeitintervall (in Sekunden), das von einem duration-Objekt d gehalten wird, ist ungefähr gleich d.count() * D::period::num / D::period::den, wobei D vom Typ chrono::duration<> ist und d ein Objekt dieses Typs ist.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_chrono_udls |
201304L |
(C++14) | Benutzerdefinierte Literale für Zeit-Typen |
[edit] Beispiel
Dieses Beispiel zeigt, wie mehrere benutzerdefinierte duration-Typen definiert und zwischen Typen konvertiert werden.
#include <chrono> #include <iostream> using namespace std::chrono_literals; template<typename T1, typename T2> using mul = std::ratio_multiply<T1, T2>; int main() { using microfortnights = std::chrono::duration<float, mul<mul<std::ratio<2>, std::chrono::weeks::period>, std::micro>>; using nanocenturies = std::chrono::duration<float, mul<mul<std::hecto, std::chrono::years::period>, std::nano>>; using fps_24 = std::chrono::duration<double, std::ratio<1, 24>>; std::cout << "1 second is:\n"; // integer scale conversion with no precision loss: no cast std::cout << std::chrono::milliseconds(1s).count() << " milliseconds\n" << std::chrono::microseconds(1s).count() << " microseconds\n" << std::chrono::nanoseconds(1s).count() << " nanoseconds\n"; // integer scale conversion with precision loss: requires a cast std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count() << " minutes\n"; // alternative to duration_cast: std::cout << 1s / 1min << " minutes\n"; // floating-point scale conversion: no cast std::cout << microfortnights(1s).count() << " microfortnights\n" << nanocenturies(1s).count() << " nanocenturies\n" << fps_24(1s).count() << " frames at 24fps\n"; }
Ausgabe
1 second is: 1000 milliseconds 1000000 microseconds 1000000000 nanoseconds 0 minutes 0 minutes 0.82672 microfortnights 0.316887 nanocenturies 24 frames at 24fps