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]
-
- 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 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]
- 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 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.
-
↑
Das heißt, entweder verwendet die Dauer Fließkomma-Ticks, oder
Period2ist exakt durchPeriodteilbar.
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:
Diesen Code ausführen
#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) |