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

来自cppreference.com
< cpp‎ | chrono‎ | duration
 
 
工具库
通用工具
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

初等字符串转换
(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 的时长。注意此构造函数仅若 const Rep2& (参数类型)能隐式转换为 rep (时长的计次类型)且满足下列条件才参与重载决议
(即,拥有整数计次的时长不能从浮点值构造,但拥有浮点计次的时长能从整数值构造)
4) 通过转换 d 到确切的周期和计次构造时长,如同用 std::chrono::duration_cast<duration>(d).count() 。为避免转换时截断,此构造函数参与重载决议,仅若转换因数的计算(用 std::ratio_divide<Period2, Period> )不溢出且:
或:
(即要么时长使用浮点计次,要么 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;
    // error: 1/1000000 is not divisible by 1/1000
//  std::chrono::milliseconds ms2 = us
    std::chrono::duration<double, std::milli> ms2 = us; // 3.0 毫秒
}

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
LWG 3050 C++11 可转换性制约使用非 const 亡值 替而使用 const 左值

参阅

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