命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | chrono‎ | duration
 
 
 
 
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 个“ticks”(时间单位)的 duration。
仅当满足以下所有条件时,此重载才参与重载决议
  • is_convertible<const Rep2&, Rep>::valuetrue
  • 满足以下任一条件:[1]
4) 通过将 d 转换为适当的周期和 tick 计数来构造 duration,如同通过 std::chrono::duration_cast<duration>(d).count()
此重载仅在转换不导致溢出且满足以下任一条件时才参与重载决议:[2]
  1. 即,带有整数 tick 计数的 duration 不能由浮点值构造,但带有浮点 tick 计数的 duration 可以由整数值构造。
  2. 即,duration 使用浮点 tick,或者 Period2 可以被 Period 整除。

目录

[编辑] 参数

r - 一个 tick 计数
d - 要从中复制的 duration

[编辑] 示例

以下代码展示了构造 duration 的几个示例(包括有效和无效的)

#include <chrono>
 
int main()
{
    std::chrono::hours h(1); // one hour
    std::chrono::milliseconds ms{3}; // 3 milliseconds
    std::chrono::duration<int, std::kilo> ks(3); // 3000 seconds
 
    // error: treat_as_floating_point<int>::value == false,
    // This duration allows whole tick counts only
//  std::chrono::duration<int, std::kilo> d3(3.5);
 
    // 30Hz clock using fractional ticks
    std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);
 
    // 3000 microseconds constructed from 3 milliseconds
    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 milliseconds
}

[编辑] 缺陷报告

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

缺陷报告 应用于 发布时的行为 正确的行为
LWG 2094 C++11 对于重载 (4)std::ratio_divide<Period2, period>::num
在评估时可能溢出
std::ratio_divide<Period2, period>::den
重载 (4) 在这种情况下不
参与重载
决议
LWG 3050 C++11 可转换性约束使用非 const xvalue 改用 const lvalue

[编辑] 参阅

赋值内容
(public member function) [编辑]
English Deutsch 日本語 한국어 中文(简体) 中文(繁體)