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
ティックでdurationを構築します。
このオーバーロードは、以下のすべての条件が満たされる場合にのみオーバーロード解決に参加します:
- 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 であること。
4)
適切な期間とティックカウントに
d
を変換することでdurationを構築します。具体的には
std::
chrono
::
duration_cast
<
duration
>
(
d
)
.
count
(
)
によって変換するかのように動作します。
このオーバーロードは、変換においてオーバーフローが発生せず、かつ以下のいずれかの条件が満たされる場合にのみ、オーバーロード解決に参加します:
[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 であること。
- ↑ すなわち、整数のティック数を持つdurationは浮動小数点値から構築することはできませんが、浮動小数点のティック数を持つdurationは整数値から構築することができます。
-
↑
すなわち、durationが浮動小数点のティックを使用しているか、または
Period2がPeriodで正確に割り切れるかのいずれかです。
目次 |
パラメータ
| r | - | ティックカウント |
| d | - | コピー元の期間 |
例
以下のコードは、期間(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++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| 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を使用する |
関連項目
|
内容を代入する
(公開メンバ関数) |