std::chrono::duration<Rep,Period>::duration
Von cppreference.com
| 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]
- std::chrono::treat_as_floating_point<Rep>::value ist true.
- std::chrono::treat_as_floating_point<Rep2>::value ist false.
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]
- std::chrono::treat_as_floating_point<Rep>::value ist true.
- Alle folgenden Bedingungen sind erfüllt
- std::ratio_divide<Period2, Period>::den ist 1.
- std::chrono::treat_as_floating_point<Rep2>::value ist false.
- ↑ 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.
- ↑ Das heißt, entweder verwendet die Dauer Fließkomma-Ticks, oder
Period2ist exakt durchPeriodteilbar.
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
Führen Sie diesen Code aus
#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) |