|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Helper classes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template<class Rep1,class Period1,class Rep2,class Period2> typenamestd::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type | (1) | (since C++11) |
template<class Rep1,class Period1,class Rep2,class Period2> typenamestd::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type | (2) | (since C++11) |
template<class Rep1,class Period,class Rep2> duration<typenamestd::common_type<Rep1,Rep2>::type, Period> | (3) | (since C++11) |
template<class Rep1,class Rep2,class Period> duration<typenamestd::common_type<Rep1,Rep2>::type, Period> | (4) | (since C++11) |
template<class Rep1,class Period,class Rep2> duration<typenamestd::common_type<Rep1,Rep2>::type, Period> | (5) | (since C++11) |
template<class Rep1,class Period1,class Rep2,class Period2> typenamestd::common_type<Rep1,Rep2>::type | (6) | (since C++11) |
template<class Rep1,class Period,class Rep2> duration<typenamestd::common_type<Rep1,Rep2>::type, Period> | (7) | (since C++11) |
template<class Rep1,class Period1,class Rep2,class Period2> typenamestd::common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type | (8) | (since C++11) |
Performs basic arithmetic operations between two durations or between a duration and a tick count.
rep is the common type betweenRep1 andRep2, and multiples the number of ticks after conversion bys.These overloads participate in overload resolution only ifs is convertible totypenamestd::common_type<Rep1, Rep2>::type.rep is the common type betweenRep1 andRep2, and divides the number of ticks after conversion bys. This overload participates in overload resolution only ifs is convertible totypenamestd::common_type<Rep1, Rep2>::type andRep2 is not a specialization ofduration.rep is the common type betweenRep1 andRep2, and creates a duration whose tick count is the remainder of the division of the tick count, after conversion, bys. This overload participates in overload resolution only ifs is convertible totypenamestd::common_type<Rep1, Rep2>::type andRep2 is not a specialization ofduration.Contents |
| lhs | - | duration on the left-hand side of the operator |
| rhs | - | duration on the right-hand side of the operator |
| d | - | the duration argument for mixed-argument operators |
| s | - | non-duration argument for mixed-argument operators |
Assuming thatCD is the function return type andCD<A, B>=std::common_type<A, B>::type, then:
#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<<" (seconds)\n"; usingnamespace std::chrono_literals; // Difference between dividing a duration by a number// and dividing a duration by another duration:std::cout<<"Dividing that by 2 minutes gives "<< s/ 2min<<'\n'<<"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<<" (seconds) = "<<std::chrono::duration_cast<std::chrono::hours>( s)<<" (hour) + "<<std::chrono::duration_cast<std::chrono::minutes>( s% 1h)<<" (minutes) + "<<std::chrono::duration_cast<std::chrono::seconds>( s% 1min)<<" (seconds)\n"; constexprauto sun_earth_distance{150'000'000ULL};// kmconstexprauto speed_of_light{300000ULL};// km/secstd::chrono::seconds t(sun_earth_distance/ speed_of_light);// secstd::cout<<"A photon flies from the Sun to the Earth in "<< t/ 1min<<" minutes "<< t% 1min<<" (seconds)\n";}
Output:
1 hour + 2*10 min + 70/10 sec = 4807s (seconds)Dividing that by 2 minutes gives 40Dividing that by 2 gives 2403 seconds4807s (seconds) = 1h (hour) + 20min (minutes) + 7s (seconds)A photon flies from the Sun to the Earth in 8 minutes 20s (seconds)
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3050 | C++11 | convertibility constraint used non-const xvalue | use const lvalues instead |