Namespaces
Variants

std::chrono::duration<Rep,Period>:: duration

From cppreference.net
constexpr duration ( ) = default ;
(1) (seit C++11)
duration ( const duration & ) = default ;
(2) (seit C++11)
template < class Rep2 >
constexpr explicit duration ( const Rep2 & r ) ;
(3) (seit C++11)
template < class Rep2, class Period2 >
constexpr duration ( const duration < Rep2, Period2 > & d ) ;
(4) (seit C++11)

Konstruiert eine neue duration aus einer von mehreren optionalen Datenquellen.

1) Der Standardkonstruktor.
2) Der Kopierkonstruktor.
3) Konstruiert eine Dauer mit r Ticks.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Bedingungen erfüllt sind:
  • is_convertible < const Rep2 & , Rep > :: value ist true .
  • Mindestens eine der folgenden Bedingungen ist erfüllt: [1]
4) Konstruiert eine Dauer durch Konvertierung von d in eine entsprechende Periode und Tickanzahl, als ob durch std:: chrono :: duration_cast < duration > ( d ) . count ( ) .
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn in der Konvertierung kein Überlauf induziert wird und eine der folgenden Bedingungen erfüllt ist: [2]
  1. Das heißt, eine Dauer mit einer ganzzahligen Tick-Anzahl kann nicht aus einem Fließkommawert konstruiert werden, aber eine Dauer mit einer Fließkomma-Tick-Anzahl kann aus einem ganzzahligen Wert konstruiert werden.
  2. Das heißt, entweder verwendet die Dauer Fließkomma-Ticks, oder Period2 ist exakt durch Period teilbar.

Inhaltsverzeichnis

Parameter

r - ein Tick-Zähler
d - eine Dauer, von der kopiert wird

Beispiel

Der folgende Code zeigt mehrere Beispiele (sowohl gültige als auch ungültige) zur Konstruktion von Durations:

#include <chrono>
int main()
{
    std::chrono::hours h(1); // eine Stunde
    std::chrono::milliseconds ms{3}; // 3 Millisekunden
    std::chrono::duration<int, std::kilo> ks(3); // 3000 Sekunden
    // Fehler: treat_as_floating_point<int>::value == false,
    // Diese Duration erlaubt nur ganze Tick-Zählungen
//  std::chrono::duration<int, std::kilo> d3(3.5);
    // 30Hz-Takt mit gebrochenen Ticks
    std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);
    // 3000 Mikrosekunden konstruiert aus 3 Millisekunden
    std::chrono::microseconds us = ms;
    // Fehler: 1/1000000 ist nicht durch 1/1000 teilbar
//  std::chrono::milliseconds ms2 = us
    std::chrono::duration<double, std::milli> ms2 = us; // 3.0 Millisekunden
}

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 2094 C++11 für Überladung (4) , std:: ratio_divide < Period2, period > :: num
könnte überlaufen bei Auswertung von
std:: ratio_divide < Period2, period > :: den
Überladung (4) nimmt nicht
an der Überladungsauflösung
in diesem Fall teil
LWG 3050 C++11 Konvertierbarkeitsbedingung verwendete nicht-konstante xvalues verwende konstante lvalues stattdessen

Siehe auch

weist die Inhalte zu
(öffentliche Elementfunktion)