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 Dauern oder zwischen einer Dauer und einer Tickanzahl durch.
rep
der gemeinsame Typ zwischen
Rep1
und
Rep2
ist, und multipliziert die Anzahl der Ticks nach der Konvertierung mit
s
.
Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn
s
konvertierbar ist zu
typename
std::
common_type
<
Rep1, Rep2
>
::
type
.
rep
der gemeinsame Typ zwischen
Rep1
und
Rep2
ist, und teilt die Anzahl der Ticks nach der Konvertierung durch
s
. Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn
s
konvertierbar ist zu
typename
std::
common_type
<
Rep1, Rep2
>
::
type
und
Rep2
keine Spezialisierung von
duration
ist.
rep
der gemeinsame Typ zwischen
Rep1
und
Rep2
ist, und erstellt eine Dauer, deren Tick-Zähler der Rest der Division des Tick-Zählers nach der Konvertierung durch
s
ist. Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn
s
konvertierbar ist zu
typename
std::
common_type
<
Rep1, Rep2
>
::
type
und
Rep2
keine Spezialisierung von
duration
ist.
Inhaltsverzeichnis |
Parameter
| lhs | - | Dauer auf der linken Seite des Operators |
| rhs | - | Dauer auf der rechten Seite des Operators |
| d | - | das Dauerargument für Operatoren mit gemischten Argumenten |
| s | - | Nicht-Dauer-Argument für Operatoren mit gemischten Argumenten |
Rückgabewert
Angenommen, dass CD der Rückgabetyp der Funktion ist und CD < A, B > = std:: common_type < A, B > :: type , dann:
Beispiel
#include <chrono> #include <iostream> int main() { // Einfache Arithmetik: std::chrono::seconds s = std::chrono::hours(1) + 2 * std::chrono::minutes(10) + std::chrono::seconds(70) / 10; std::cout << "1 Stunde + 2*10 min + 70/10 sec = " << s << " (Sekunden)\n"; using namespace std::chrono_literals; // Unterschied zwischen Division einer Dauer durch eine Zahl // und Division einer Dauer durch eine andere Dauer: std::cout << "Division durch 2 Minuten ergibt " << s / 2min << '\n' << "Division durch 2 ergibt " << (s / 2).count() << " Sekunden\n"; // Der Restoperator ist nützlich, um zu bestimmen, wo // in einem Zeitrahmen sich diese bestimmte Dauer befindet, z.B. um // sie in Stunden, Minuten und Sekunden aufzuteilen: std::cout << s << " (Sekunden) = " << std::chrono::duration_cast<std::chrono::hours>( s) << " (Stunde) + " << std::chrono::duration_cast<std::chrono::minutes>( s % 1h) << " (Minuten) + " << std::chrono::duration_cast<std::chrono::seconds>( s % 1min) << " (Sekunden)\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 << "Ein Photon fliegt von der Sonne zur Erde in " << t / 1min << " Minuten " << t % 1min << " (Sekunden)\n"; }
Ausgabe:
1 Stunde + 2*10 min + 70/10 sec = 4807s (Sekunden) Division durch 2 Minuten ergibt 40 Division durch 2 ergibt 2403 Sekunden 4807s (Sekunden) = 1h (Stunde) + 20min (Minuten) + 7s (Sekunden) Ein Photon fliegt von der Sonne zur Erde in 8 Minuten 20s (Sekunden)
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 3050 | C++11 | convertibility constraint used non-const xvalue | use const lvalues instead |