operator+,-,*,/,% (std::chrono::duration)
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
duration
<
Rep1,Period1
>
, duration
<
Rep2,Period2
>>
::
type
|
(1) | (C++11 起) |
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
duration
<
Rep1,Period1
>
, duration
<
Rep2,Period2
>>
::
type
|
(2) | (C++11 起) |
|
template
<
class
Rep1,
class
Period,
class
Rep2
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(3) | (C++11 起) |
|
template
<
class
Rep1,
class
Rep2,
class
Period
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(4) | (C++11 起) |
|
template
<
class
Rep1,
class
Period,
class
Rep2
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(5) | (C++11 起) |
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
Rep1,Rep2
>
::
type
|
(6) | (C++11 起) |
|
template
<
class
Rep1,
class
Period,
class
Rep2
>
duration
<
typename
std::
common_type
<
Rep1,Rep2
>
::
type
, Period
>
|
(7) | (C++11 起) |
|
template
<
class
Rep1,
class
Period1,
class
Rep2,
class
Period2
>
typename
std::
common_type
<
duration
<
Rep1,Period1
>
, duration
<
Rep2,Period2
>>
::
type
|
(8) | (C++11 起) |
对两个时长之间或时长与滴答计数之间执行基本算术运算。
rep
为
Rep1
与
Rep2
间公共类型的时长,并在转换后将时钟周期数乘以
s
。
这些重载仅当
s
可转换为
typename
std::
common_type
<
Rep1, Rep2
>
::
type
时参与重载决议。
rep
类型为
Rep1
与
Rep2
公共类型的持续时间,并将转换后的滴答计数除以
s
。此重载仅当
s
可转换为
typename
std::
common_type
<
Rep1, Rep2
>
::
type
且
Rep2
不是
duration
的特化时参与重载决议。
rep
为
Rep1
和
Rep2
之间公共类型的持续时间,并创建一个新的持续时间,其滴答计数为转换后的滴答计数除以
s
的余数。此重载仅当
s
可转换为
typename
std::
common_type
<
Rep1, Rep2
>
::
type
且
Rep2
不是
duration
的特化时参与重载决议。
目录 |
参数
| lhs | - | 运算符左侧的时间长度 |
| rhs | - | 运算符右侧的时间长度 |
| d | - | 混合参数运算符中的时长参数 |
| s | - | 混合参数运算符中的非时长参数 |
返回值
假设 CD 是函数返回类型且 CD < A, B > = std:: common_type < A, B > :: type ,则:
示例
#include <chrono> #include <iostream> int main() { // 简单算术运算: std::chrono::seconds s = std::chrono::hours(1) + 2 * std::chrono::minutes(10) + std::chrono::seconds(70) / 10; std::cout << "1小时 + 2*10分钟 + 70/10秒 = " << s << " (秒)\n"; using namespace std::chrono_literals; // 持续时间除以数字与持续时间除以另一持续时间的区别: std::cout << "将其除以2分钟得到 " << s / 2min << '\n' << "将其除以2得到 " << (s / 2).count() << " 秒\n"; // 取余运算符在确定特定持续时间在时间帧中的位置时非常有用, // 例如将其分解为小时、分钟和秒: std::cout << s << " (秒) = " << std::chrono::duration_cast<std::chrono::hours>( s) << " (小时) + " << std::chrono::duration_cast<std::chrono::minutes>( s % 1h) << " (分钟) + " << std::chrono::duration_cast<std::chrono::seconds>( s % 1min) << " (秒)\n"; constexpr auto sun_earth_distance{150'000'000ULL}; // 公里 constexpr auto speed_of_light{300000ULL}; // 公里/秒 std::chrono::seconds t(sun_earth_distance / speed_of_light); // 秒 std::cout << "光子从太阳飞到地球需要 " << t / 1min << " 分钟 " << t % 1min << " (秒)\n"; }
输出:
1小时 + 2*10分钟 + 70/10秒 = 4807秒 (秒) 将其除以2分钟得到 40 将其除以2得到 2403 秒 4807秒 (秒) = 1小时 (小时) + 20分钟 (分钟) + 7秒 (秒) 光子从太阳飞到地球需要 8 分钟 20秒 (秒)
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3050 | C++11 | 可转换性约束使用了非const右值 | 改用const左值 |