std::chrono::duration::duration
Aus cppreference.com
<tbody>
</tbody>
constexpr duration() = default; |
(1) | |
duration(const duration&) = default; |
(2) | |
template <class Rep2> constexpr explicit duration(const Rep2& r); |
(3) | |
template <class Rep2, class Period2> constexpr duration(const duration<Rep2, Period2>& d); |
(4) | |
Ein Konstruktor erzeugt eine neue Zeitdauer duration aus einer von mehreren optional Quellen.
1) Der Standardkonstruktor wird standardmäßig vom Kompiler erzeugt.
2) Der Kopierkonstruktor wird standardmäßig vom Kompiler erzeugt, d.h. es wird eine bitweise Kopie der Taktanzahl gemacht.
3) Dieser Konstruktor erzeugt eine Zeitdauer mit
r Zeitschritten. Beachten Sie, dass dieser Konstruktor nur an der Überladungsauflösung beteiligt ist, falls Rep2 (der Argumenttyp) implizit konvertierbar nach rep (Typ der Zeitschrittweitendauer) ist und
std::chrono::treat_as_floating_point<rep>::valuewahr oderstd::chrono::treat_as_floating_point<Rep2>::valuefalsch ist.
(d.h. das eine Zeitdauer mit einer ganzen Zahl als Taktanzahl nicht von einem Gleitkommawert konstruiert werden kann, aber eine Dauer mit einer Gleitkommanzahl als Taktanzahl kann aus einem Ganzzahlwert konstruiert werden.)
4) Dieser Konstruktor erzeugt eine Zeitdauer durch Umwandlung von
d in einen anwendbaren Zeitraum mit angepasster Anzahl der Zeitschritte. Dieses ist äquivalent zu std::chrono::duration_cast<duration>(d).count(). Um das Abschneiden bei der Konvertierung zu verhindern, ist dieser Konstruktor nur bei der Überladungsauflösung beteiligt, falls
std::chrono::treat_as_floating_point<rep>::value == true
oder beides:
std::ratio_divide<Period2, period>::den == 1undstd::chrono::treat_as_floating_point<Rep2>::value == false.
(d.h. entweder die Zeitdauer verwendet eine Gleitkommazahl als Zeitschrittweite oder
Period2 ist ohne Rest teilbar durch Periode)Parameter
| r | - | eine Taktanzahl |
| d | - | die Zeitdauer, die kopiert werden soll. |
Beispiel
Der folgende Quellkode zeigt einige Beispiele (sowohl gültige als auch ungültige) wie Zeitdauern erzeugt werden können.
#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
}
Siehe auch
| weist Inhalte zu. (öffentliche Elementfunktion) | |