名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | chrono‎ | duration
 
 
 
日付と時間のユーティリティ
(C++11)
(C++11)
時計
(C++20)
                                                  
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
カレンダー
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
タイムゾーン
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
C スタイルの日付と時間
 
 
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)

2つの duration の間で、または duration と刻み数の間で、基本的な算術演算を行います。

1) 2つの duration をその共通型に変換し、その変換後の刻み数を合計した刻み数を持つ duration を作成します。
2) 2つの duration をその共通型に変換し、その変換後の rhs の刻み数から lhs の刻み数を引いた刻み数を持つ duartion を作成します。
3-4) Rep1Rep2 の共通型である rep を持つ duration に d を変換し、その変換後の刻み数に s を掛けます。
5) Rep1Rep2 の共通型である rep を持つ duration に d を変換し、その変換後の刻み数を s で割ります。
6) 2つの duration をその共通型に変換し、その変換後の lhs の刻み数を rhs の刻み数で割ります。 この演算子の戻り値は duration でないことに注意してください。
7) Rep1Rep2 の共通型である rep を持つ duration に d を変換し、その変換後の刻み数を s で割った余りの刻み数を持つ duration を作成します。
8) 2つの duration をその共通型に変換し、その変換後の刻み数の剰余の刻み数を持つ duration を作成します。

[編集] 引数

lhs - 演算子の左側の duration
rhs - 演算子の右側の duration
d - 混合した引数の演算子に対する duration 引数
s - 混合した引数の演算子に対する刻み数の引数

[編集] 戻り値

CD が関数の戻り値の型で CR<A, B> = std::common_type<A, B>::type であるとすると、

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() (この演算子の戻り値の型は duration ではありません)
7) CD(CD(d).count() % s)
8) CD(CD(lhs).count() % CD(rhs).count())


[編集]

#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.count() << " seconds\n";
 
    // difference between dividing a duration by a number
    // and dividing a duration by another duration
    std::cout << "Dividing that by 2 minutes gives "
              << s / std::chrono::minutes(2) << '\n';
    std::cout << "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.count() << " seconds is "
             << std::chrono::duration_cast<std::chrono::hours>(
                    s
                ).count() << " hours, "
             << std::chrono::duration_cast<std::chrono::minutes>(
                    s % std::chrono::hours(1)
                ).count() << " minutes, "
             << std::chrono::duration_cast<std::chrono::seconds>(
                    s % std::chrono::minutes(1)
                ).count() << " seconds\n";
}

出力:

1 hour + 2*10 min + 70/10 sec = 4807 seconds
Dividing that by 2 minutes gives 40
Dividing that by 2 gives 2403 seconds
4807 seconds is 1 hours, 20 minutes, 7 seconds