Espacios de nombres
Variantes
Acciones

operator+,-,*,/,%(std::chrono::duration)

De cppreference.com
< cpp‎ | chrono‎ | duration
 
 
Biblioteca de servicios
 
 
 
template<class Rep1, class Period1, class Rep2, class Period2 >

typenamestd::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type
    constexpr operator+(const duration<Rep1,Period1>& lhs,

                         const duration<Rep2,Period2>& rhs );
(1)
template<class Rep1, class Period1, class Rep2, class Period2 >

typenamestd::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type
    constexpr operator-(const duration<Rep1,Period1>& lhs,

                         const duration<Rep2,Period2>& rhs );
(2)
template<class Rep1, class Period, class Rep2 >

duration<typenamestd::common_type<Rep1,Rep2>::type, Period>
    constexpr operator*(const duration<Rep1,Period>& d,

                         const Rep2& s );
(3)
template<class Rep1, class Rep2, class Period >

duration<typenamestd::common_type<Rep1,Rep2>::type, Period>
    constexpr operator*(const Rep1& s,

                         const duration<Rep2,Period>& d );
(4)
template<class Rep1, class Period, class Rep2 >

duration<typenamestd::common_type<Rep1,Rep2>::type, Period>
    constexpr operator/(const duration<Rep1,Period>& d,

                         const Rep2& s );
(5)
template<class Rep1, class Period1, class Rep2, class Period2 >

typenamestd::common_type<Rep1,Rep2>::type
    constexpr operator/(const duration<Rep1,Period1>& lhs,

                         const duration<Rep2,Period2>& rhs );
(6)
template<class Rep1, class Period, class Rep2 >

duration<typenamestd::common_type<Rep1,Rep2>::type, Period>
    constexpr operator%(const duration<Rep1, Period>& d,

                         const Rep2& s );
(7)
template<class Rep1, class Period1, class Rep2, class Period2 >

typenamestd::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type
constexpr operator%(const duration<Rep1,Period1>& lhs,

                     const duration<Rep2,Period2>& rhs );
(8)

Realiza operaciones aritméticas básicas entre dos duraciones o entre una duración y una cuenta de tics.

1) Convierte las dos duraciones a su tipo común y crea una duración cuya cuenta de tics es la suma de las cuentas de tics después de la conversión.
2) Convierte las dos duraciones a su tipo común y crea una duración cuya cuenta de tics es número rhs de tics restado del número lhs de tics después de la conversión.
3-4) Convierte la duración d a una cuya rep es el tipo común entre Rep1 y Rep2, y multiplica el número de tics después de la conversión por s. Estas sobrecargas solo participan en la resolución de sobrecargas si s es convertible a typenamestd::common_type<Rep1, Rep2>::type.
5) Convierte la duración d a una cuya rep es el tipo común entre Rep1 y Rep2, y divide el número de tics después de la conversión por s. Esta sobrecarga solo participa en la resolución de sobrecargas si s es convertible a typenamestd::common_type<Rep1, Rep2>::type y Rep2 no es una especialización de duration.
6) Convierte las dos duraciones a su tipo común y divide la cuenta de tics de lhs después de la conversión por la cuenta de tics de rhs después de la conversión. Ten en cuenta que el valor de retorno de este operador no es una duración.
7) Convierte la duración d a una cuya rep es el tipo común entre Rep1 y Rep2, y crea una duración cuya cuenta de tics es el resto de la división de la cuenta de tics, después de la conversión, por s. Esta sobrecarga solo participa en la resolución de sobrecargas si s es convertible a typenamestd::common_type<Rep1, Rep2>::type y Rep2 no es una especialización de duration.
8) Convierte las dos duraciones a su tipo común y crea una duración cuya cuenta de tics es el resto de las cuents de tics después de la conversión.

Contenido

[editar]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 - El argumento que no es duración para operadores de argumentos mixtos.

[editar]Valor de retorno

Suponiendo que CD es el tipo de retorno de función y CR<A, B>=std::common_type<A, B>::type, entonces:

1)CD(CD(lhs).count()+ CD(rhs).count())
2)CD(CD(lhs).count()- CD(rhs).count())
3-4)CD(CD(d).count()* s)
5)CD(CD(d).count()/ s).
6)CD(lhs).count()/ CD(rhs).count() (el tipo de retorno de este operador no es una duración)
7)CD(CD(d).count()% s)
8)CD(CD(lhs).count()% CD(rhs).count())


[editar]Ejemplo

#include <chrono>#include <iostream>int main(){// aritmética simplestd::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 sec = "<< s.count()<<" segundos\n";   // diferencia entre dividir una duracion por un número// y dividir una duración por otra duraciónstd::cout<<"Dividir eso por 2 minutos da "<< s /std::chrono::minutes(2)<<'\n';std::cout<<"Dividir eso por 2 da "<<(s /2).count()<<" segundos\n";   // el operador de resto es útil para determinar en qué parte de un período// de tiempo se encuentra esta duración particular, p. para dividirlo en horas,// minutos y segundos:std::cout<< s.count()<<" segundos es "<<std::chrono::duration_cast<std::chrono::hours>( s ).count()<<" hora(s), "<<std::chrono::duration_cast<std::chrono::minutes>( s %std::chrono::hours(1)).count()<<" minutos, "<<std::chrono::duration_cast<std::chrono::seconds>( s %std::chrono::minutes(1)).count()<<" segundos\n";}

Salida:

1 hora + 2*10 min + 70/10 sec = 4807 segundos Dividir eso por 2 minutos da 40 Dividir eso por 2 da 2403 segundos 4807 segundos es 1 hora(s), 20 minutos, 7 segundos

[editar]Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3050 C++11 La restricción de convertibilidad usaba un x-valor no const. Usa l-valores const en su lugar.
close