std::chrono::duration<Rep,Period>::duration

来自cppreference.com
< cpp‎ | chrono‎ | duration
 
 
工具库
语言支持
类型支持(基本类型、RTTI)
库功能特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)

 
 
 
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>::valuetrue
  • 满足以下任意条件:[1]
4) 通过转换 d 到适当的周期和计次来构造时长,如同用 std::chrono::duration_cast<duration>(d).count()
此重载只有在转换不会引发溢出,并且满足以下任意条件时才会参与重载决议:[2]
  1. 也就是说,不能从浮点值构造拥有整数计次的时长,但能从整数值构造拥有浮点计次的时长。
  2. 也就是说,要么时长使用浮点计次,要么 Period2 能被 Period 整除。

参数

r - 计次数
d - 要被复制的时长

示例

下列代码展示数个如何构造时长的示例(既有有效方式也有无效方式):

#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>::den 求值
可能会导致 std::ratio_divide<Period2, period>::num 溢出
此时重载 (4) 不会参与重载决议
LWG 3050 C++11 可转换性制约使用非 const 亡值 改为使用 const 左值

参阅

赋值内容
(公开成员函数)