std::chrono::duration<Rep,Period>:: duration
From cppreference.net
|
constexpr
duration
(
)
=
default
;
|
(1) | (自 C++11 起) |
|
duration
(
const
duration
&
)
=
default
;
|
(2) | (自 C++11 起) |
|
template
<
class
Rep2
>
constexpr explicit duration ( const Rep2 & r ) ; |
(3) | (自 C++11 起) |
|
template
<
class
Rep2,
class
Period2
>
constexpr duration ( const duration < Rep2, Period2 > & d ) ; |
(4) | (自 C++11 起) |
从若干可选数据源之一构造新的
duration
对象。
1)
默认构造函数。
2)
复制构造函数。
3)
构造一个持续时间为
r
个时钟周期的对象。
此重载仅在满足以下所有条件时参与重载决议:
- is_convertible < const Rep2 & , Rep > :: value 为 true 。
- 满足以下任意条件: [1]
-
- std:: chrono :: treat_as_floating_point < Rep > :: value 为 true 。
- std:: chrono :: treat_as_floating_point < Rep2 > :: value 为 false 。
此重载仅在转换不会引发溢出,且满足以下任一条件时参与重载决议:
[2]
- std:: chrono :: treat_as_floating_point < Rep > :: value 为 true 。
- 满足以下所有条件:
-
- std:: ratio_divide < Period2, Period > :: den 为 1 。
- std:: chrono :: treat_as_floating_point < Rep2 > :: value 为 false 。
目录 |
参数
| r | - | 一个计时计数值 |
| d | - | 要复制的时间长度来源 |
示例
以下代码展示了构造时长(duration)的几种示例(包括有效和无效用法):
运行此代码
#include <chrono> int main() { std::chrono::hours h(1); // 一小时 std::chrono::milliseconds ms{3}; // 3毫秒 std::chrono::duration<int, std::kilo> ks(3); // 3000秒 // 错误:treat_as_floating_point<int>::value == false, // 此时长类型仅允许整型计数 // std::chrono::duration<int, std::kilo> d3(3.5); // 使用小数刻度的30Hz时钟 std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5); // 由3毫秒构造的3000微秒 std::chrono::microseconds us = ms; // 错误:1/1000000不能被1/1000整除 // std::chrono::milliseconds ms2 = us std::chrono::duration<double, std::milli> ms2 = us; // 3.0毫秒 }
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2094 | C++11 |
对于重载
(4)
,
std::
ratio_divide
<
Period2, period
>
::
num
在计算时可能溢出 std:: ratio_divide < Period2, period > :: den |
在此情况下重载
(4)
不参与重载 决议 |
| LWG 3050 | C++11 | 可转换性约束使用了非const右值 | 改用const左值 |
参见
|
赋值内容
(公开成员函数) |