Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | chrono‎ | duration
 
 
 
 
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 ein neues duration aus einer von mehreren optionalen Datenquellen.

1) Der Default-Konstruktor.
2) Der Kopierkonstruktor.
3) Konstruiert eine Dauer mit r Ticks.
Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn alle folgenden Bedingungen erfüllt sind
  • is_convertible<const Rep2&, Rep>::value ist true.
  • Eine der folgenden Bedingungen ist erfüllt:[1]
4) Konstruiert eine Dauer durch Umwandlung von d in eine geeignete Periode und Taktanzahl, als ob durch std::chrono::duration_cast<duration>(d).count().
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn keine Überlaufbedingung bei der Konvertierung auftritt, und eine der folgenden Bedingungen erfüllt ist:[2]
  1. Das heißt, eine Dauer mit einer ganzzahligen Taktanzahl kann nicht aus einem Fließkommawert konstruiert werden, aber eine Dauer mit einer Fließkomma-Taktanzahl 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.

Inhalt

[bearbeiten] Parameter

r - eine Taktanzahl
d - eine zu kopierende Dauer

[bearbeiten] Beispiel

Der folgende Code zeigt mehrere Beispiele (sowohl gültige als auch ungültige) für die Konstruktion von Dauern

#include <chrono>
 
int main()
{
    std::chrono::hours h(1); // one hour
    std::chrono::milliseconds ms{3}; // 3 milliseconds
    std::chrono::duration<int, std::kilo> ks(3); // 3000 seconds
 
    // error: treat_as_floating_point<int>::value == false,
    // This duration allows whole tick counts only
//  std::chrono::duration<int, std::kilo> d3(3.5);
 
    // 30Hz clock using fractional ticks
    std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);
 
    // 3000 microseconds constructed from 3 milliseconds
    std::chrono::microseconds us = ms;
    // error: 1/1000000 is not divisible by 1/1000
//  std::chrono::milliseconds ms2 = us
    std::chrono::duration<double, std::milli> ms2 = us; // 3.0 milliseconds
}

[bearbeiten] Fehlerberichte

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

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

[bearbeiten] Siehe auch

weist den Inhalt zu
(public member function) [bearbeiten]
English Deutsch 日本語 中文(简体) 中文(繁體)