Namensräume
Varianten
Aktionen

std::chrono::duration

Von cppreference.com
< cpp‎ | chrono
 
 
 
 
Definiert in Header <chrono>
template<

    class Rep,
    class Period = std::ratio<1>

> class duration;
(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) [edit]
weist den Inhalt zu
(public member function) [edit]
gibt die Anzahl der Ticks zurück
(public member function) [edit]
[static]
gibt den speziellen duration-Wert null zurück
(public static member function) [edit]
[static]
gibt den speziellen duration-Wert min zurück
(public static member function) [edit]
[static]
gibt den speziellen duration-Wert max zurück
(public static member function) [edit]
implementiert unäres + und unäres -
(public member function) [edit]
inkrementiert oder dekrementiert die Tick-Anzahl
(public member function) [edit]
implementiert zusammengesetzte Zuweisung zwischen zwei durations
(public member function) [edit]

[edit] Non-member functions

implementiert arithmetische Operationen mit Dauern als Argumente
(Funktionstemplate) [edit]
(C++11)(C++11)(entfernt in C++20)(C++11)(C++11)(C++11)(C++11)(C++20)
vergleicht zwei Dauern
(Funktionstemplate) [edit]
konvertiert eine Dauer in eine andere mit einem anderen Tick-Intervall
(Funktionstemplate) [edit]
konvertiert eine Dauer in eine andere und rundet ab
(Funktionstemplate) [edit]
konvertiert eine Dauer in eine andere und rundet auf
(Funktionstemplate) [edit]
konvertiert eine Dauer in eine andere, rundet auf die nächste, bei Gleichstand zu geraden Zahlen
(Funktionstemplate) [edit]
ermittelt den Absolutwert der duration
(function template) [edit]
führt die Stream-Ausgabe auf einer duration durch
(function template) [edit]
parst eine duration aus einem Stream gemäß dem angegebenen Format
(function template) [edit]

[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 days, weeks, months und years deckt einen Bereich von mindestens ±40000 Jahren ab. years ist gleich 365,2425 days (die durchschnittliche Länge eines gregorianischen Jahres). months ist gleich 30,436875 days (genau 1/12 von years).

(seit C++20)

[edit] Helper classes

spezialisiert den std::common_type-Trait
(Klassentemplate-Spezialisierung) [edit]
zeigt an, dass eine duration in eine duration mit anderer Tick-Periode konvertierbar ist
(class template) [edit]
erstellt Null-, Min- und Max-Werte eines Tick-Zählers gegebenen Typs
(class template) [edit]
Formatierungsunterstützung für duration
(Klassentemplate-Spezialisierung) [edit]
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>>

    = enable_nonlocking_formatter_optimization<Rep>;
(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
ein std::chrono::duration Literal, das Stunden repräsentiert
(Funktion) [bearbeiten]
ein std::chrono::duration Literal, das Minuten repräsentiert
(Funktion) [bearbeiten]
ein std::chrono::duration Literal, das Sekunden repräsentiert
(Funktion) [bearbeiten]
ein std::chrono::duration Literal, das Millisekunden repräsentiert
(Funktion) [bearbeiten]
ein std::chrono::duration Literal, das Mikrosekunden repräsentiert
(Funktion) [bearbeiten]
ein std::chrono::duration Literal, das Nanosekunden repräsentiert
(Funktion) [bearbeiten]

Hinweis: Die Suffixe d und y beziehen sich nicht auf days und years, sondern auf day bzw. year.

(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