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) | (desde C++11) |
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
duration
<
Rep1,Period1
>
, duration
<
Rep2,Period2
>>
::
type
|
(2) | (desde C++11) |
|
template
<
class
Rep1,
class
Period,
class
Rep2
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(3) | (desde C++11) |
|
template
<
class
Rep1,
class
Rep2,
class
Period
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(4) | (desde C++11) |
|
template
<
class
Rep1,
class
Period,
class
Rep2
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(5) | (desde C++11) |
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
Rep1,Rep2
>
::
type
|
(6) | (desde C++11) |
|
template
<
class
Rep1,
class
Period,
class
Rep2
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(7) | (desde C++11) |
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
duration
<
Rep1,Period1
>
, duration
<
Rep2,Period2
>>
::
type
|
(8) | (desde C++11) |
Realiza operaciones aritméticas básicas entre dos duraciones o entre una duración y un recuento de ticks.
rep
es el tipo común entre
Rep1
y
Rep2
, y multiplica el número de ticks después de la conversión por
s
.
Estas sobrecargas participan en la resolución de sobrecarga solo si
s
es convertible a
typename
std::
common_type
<
Rep1, Rep2
>
::
type
.
rep
es el tipo común entre
Rep1
y
Rep2
, y divide el número de ticks después de la conversión por
s
. Esta sobrecarga participa en la resolución de sobrecarga solo si
s
es convertible a
typename
std::
common_type
<
Rep1, Rep2
>
::
type
y
Rep2
no es una especialización de
duration
.
rep
es el tipo común entre
Rep1
y
Rep2
, y crea una duración cuyo conteo de ticks es el resto de la división del conteo de ticks, después de la conversión, por
s
. Esta sobrecarga participa en la resolución de sobrecarga solo si
s
es convertible a
typename
std::
common_type
<
Rep1, Rep2
>
::
type
y
Rep2
no es una especialización de
duration
.
Contenidos |
Parámetros
| lhs | - | duración en el lado izquierdo del operador |
| rhs | - | duración en el lado derecho del operador |
| d | - | el argumento de duración para operadores de argumentos mixtos |
| s | - | argumento no-duración para operadores de argumentos mixtos |
Valor de retorno
Suponiendo que CD es el tipo de retorno de la función y CD < A, B > = std:: common_type < A, B > :: type , entonces:
Ejemplo
#include <chrono> #include <iostream> int main() { // Aritmética simple: std::chrono::seconds s = std::chrono::hours(1) + 2 * std::chrono::minutes(10) + std::chrono::seconds(70) / 10; std::cout << "1 hora + 2*10 min + 70/10 seg = " << s << " (segundos)\n"; using namespace std::chrono_literals; // Diferencia entre dividir una duración por un número // y dividir una duración por otra duración: std::cout << "Dividir eso por 2 minutos da " << s / 2min << '\n' << "Dividir eso por 2 da " << (s / 2).count() << " segundos\n"; // El operador de resto es útil para determinar dónde // en un marco temporal se encuentra esta duración particular, p.ej. para // descomponerlo en horas, minutos y segundos: std::cout << s << " (segundos) = " << std::chrono::duration_cast<std::chrono::hours>( s) << " (hora) + " << std::chrono::duration_cast<std::chrono::minutes>( s % 1h) << " (minutos) + " << std::chrono::duration_cast<std::chrono::seconds>( s % 1min) << " (segundos)\n"; constexpr auto sun_earth_distance{150'000'000ULL}; // km constexpr auto speed_of_light{300000ULL}; // km/seg std::chrono::seconds t(sun_earth_distance / speed_of_light); // seg std::cout << "Un fotón viaja desde el Sol a la Tierra en " << t / 1min << " minutos " << t % 1min << " (segundos)\n"; }
Salida:
1 hora + 2*10 min + 70/10 seg = 4807s (segundos) Dividir eso por 2 minutos da 40 Dividir eso por 2 da 2403 segundos 4807s (segundos) = 1h (hora) + 20min (minutos) + 7s (segundos) Un fotón viaja desde el Sol a la Tierra en 8 minutos 20s (segundos)
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3050 | C++11 | restricción de convertibilidad usaba xvalue no constante | usar lvalues constantes en su lugar |