Espacios de nombres
Variantes

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

De cppreference.com
 
 
Biblioteca de servicios
Apoyo del lenguaje
Apoyo de tipos (tipos básicos, RTTI)
Macros de prueba de característica de la biblioteca (C++20)
Servicios de programa
Funciones variádicas
Apoyo de corrutinas (C++20)
Apoyo de contratos (C++26)
Comparación de tres vías (C++20)
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

 
 
 
template< class Rep1, class Period1, class Rep2, class Period2 >
typename std::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 >
typename std::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<typename std::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<typename std::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<typename std::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 >
typename std::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<typename std::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 >
typename std::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 typename std::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 typename std::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 typename std::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.

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.

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())


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 sec = " << s.count() << " segundos\n";

    // diferencia entre dividir una duracion por un número
    // y dividir una duración por otra duración
    std::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

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.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.