operator+,-,*,/,%(std::chrono::duration)
| template< class Rep1, class Period1, class Rep2, class Period2 > typename std::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type |
(1) | (seit C++11) |
| template< class Rep1, class Period1, class Rep2, class Period2 > typename std::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type |
(2) | (seit C++11) |
| template< class Rep1, class Period, class Rep2 > duration<typename std::common_type<Rep1,Rep2>::type, Period> |
(3) | (seit C++11) |
| template< class Rep1, class Rep2, class Period > duration<typename std::common_type<Rep1,Rep2>::type, Period> |
(4) | (seit C++11) |
| template< class Rep1, class Period, class Rep2 > duration<typename std::common_type<Rep1,Rep2>::type, Period> |
(5) | (seit C++11) |
| template< class Rep1, class Period1, class Rep2, class Period2 > typename std::common_type<Rep1,Rep2>::type |
(6) | (seit C++11) |
| template< class Rep1, class Period, class Rep2 > duration<typename std::common_type<Rep1,Rep2>::type, Period> |
(7) | (seit C++11) |
| template< class Rep1, class Period1, class Rep2, class Period2 > typename std::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type |
(8) | (seit C++11) |
Führt grundlegende arithmetische Operationen zwischen zwei Zeitdauern oder zwischen einer Zeitdauer und einer Taktanzahl durch.
rep der gemeinsame Typ zwischen Rep1 und Rep2 ist, und multipliziert die Anzahl der Takte nach der Konvertierung mit s. Diese Überladungen nehmen nur an der Auflösung der Überladung teil, wenn s konvertierbar in typename std::common_type<Rep1, Rep2>::type ist.rep der gemeinsame Typ zwischen Rep1 und Rep2 ist, und teilt die Anzahl der Takte nach der Konvertierung durch s. Diese Überladung nimmt nur an der Auflösung der Überladung teil, wenn s konvertierbar in typename std::common_type<Rep1, Rep2>::type ist und Rep2 keine Spezialisierung von duration ist.rep der gemeinsame Typ zwischen Rep1 und Rep2 ist, und erstellt eine Zeitdauer, deren Taktanzahl der Rest der Division der Taktanzahl nach der Konvertierung durch s ist. Diese Überladung nimmt nur an der Auflösung der Überladung teil, wenn s konvertierbar in typename std::common_type<Rep1, Rep2>::type ist und Rep2 keine Spezialisierung von duration ist.Inhalt |
[edit] Parameter
| lhs | - | Zeitdauer auf der linken Seite des Operators |
| rhs | - | Zeitdauer auf der rechten Seite des Operators |
| d | - | das Zeitdauerargument für gemischte Operatoren |
| s | - | Nicht-Zeitdauer-Argument für gemischte Operatoren |
[edit] Rückgabewert
Angenommen, CD ist der Rückgabetyp der Funktion und CD<A, B> = std::common_type<A, B>::type, dann
[edit] Beispiel
#include <chrono> #include <iostream> int main() { // Simple arithmetic: std::chrono::seconds s = std::chrono::hours(1) + 2 * std::chrono::minutes(10) + std::chrono::seconds(70) / 10; std::cout << "1 hour + 2*10 min + 70/10 sec = " << s << " (seconds)\n"; using namespace std::chrono_literals; // Difference between dividing a duration by a number // and dividing a duration by another duration: std::cout << "Dividing that by 2 minutes gives " << s / 2min << '\n' << "Dividing that by 2 gives " << (s / 2).count() << " seconds\n"; // The remainder operator is useful in determining where // in a time frame is this particular duration, e.g. to // break it down into hours, minutes, and seconds: std::cout << s << " (seconds) = " << std::chrono::duration_cast<std::chrono::hours>( s) << " (hour) + " << std::chrono::duration_cast<std::chrono::minutes>( s % 1h) << " (minutes) + " << std::chrono::duration_cast<std::chrono::seconds>( s % 1min) << " (seconds)\n"; constexpr auto sun_earth_distance{150'000'000ULL}; // km constexpr auto speed_of_light{300000ULL}; // km/sec std::chrono::seconds t(sun_earth_distance / speed_of_light); // sec std::cout << "A photon flies from the Sun to the Earth in " << t / 1min << " minutes " << t % 1min << " (seconds)\n"; }
Ausgabe
1 hour + 2*10 min + 70/10 sec = 4807s (seconds) Dividing that by 2 minutes gives 40 Dividing that by 2 gives 2403 seconds 4807s (seconds) = 1h (hour) + 20min (minutes) + 7s (seconds) A photon flies from the Sun to the Earth in 8 minutes 20s (seconds)
[edit] 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 3050 | C++11 | Konvertierbarkeitsbeschränkung verwendete nicht-const xvalue | Verwenden Sie stattdessen const lvalues |