std::chrono::duration<Rep,Period>::duration
提供: cppreference.com
<tbody>
</tbody>
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 個の刻みを持つ duration を構築します。 このコンストラクタは、 Rep2 (引数の型) が rep (この duration の刻み数の型) に暗黙に変換可能であり、さらにstd::chrono::treat_as_floating_point<rep>::valueが true である、またはstd::chrono::treat_as_floating_point<Rep2>::valueが false である
場合にのみ、オーバーロード解決に参加します。
(つまり、整数型の刻み数を持つ duration は浮動小数点値から構築することはできませんが、浮動小数点型の刻み数を持つ duration は整数値から構築できます)
4)
std::chrono::duration_cast<duration>(d).count() を行なったかのように、 d を適切な刻み幅と刻み数に変換することによって duration を構築します。 変換による切り捨てを防ぐために、このコンストラクタは、 (std::ratio_divide<Period2, Period> による) 変換係数の計算がオーバーフローせず、さらに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である
場合にのみ、オーバーロード解決に参加します。
(つまり、どちらかの duration が浮動小数点の刻み数を持つか、
Period2 が period で割り切れる場合です)引数
| r | - | 刻み数 |
| d | - | コピー元の duration |
例
以下のコードは duration を構築する方法の例 (有効なものと無効なものの両方) をいくつか示します。
Run this code
#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
}
関連項目
| 内容を代入します (パブリックメンバ関数) |