operator+,-,*,/,%(std::chrono::duration)
提供: cppreference.com
<tbody>
</tbody>
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)
Rep1 と Rep2 の共通型である rep を持つ duration に d を変換し、その変換後の刻み数に s を掛けます。5)
Rep1 と Rep2 の共通型である rep を持つ duration に d を変換し、その変換後の刻み数を s で割ります。6) 2つの duration をその共通型に変換し、その変換後の
lhs の刻み数を rhs の刻み数で割ります。 この演算子の戻り値は duration でないことに注意してください。7)
Rep1 と Rep2 の共通型である rep を持つ duration に d を変換し、その変換後の刻み数を s で割った余りの刻み数を持つ duration を作成します。8) 2つの duration をその共通型に変換し、その変換後の刻み数の剰余の刻み数を持つ duration を作成します。
| This section is incomplete Reason: list the "does not participate in overload resolution unless" constraints |
引数
| 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())
例
Run this code
#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