std::chrono:: duration
|
ヘッダーで定義
<chrono>
|
||
|
template
<
class
Rep,
|
(C++11以降) | |
クラステンプレート
std::chrono::duration
は時間間隔を表します。
これは
Rep
型のティックカウントとティック周期で構成され、ティック周期はコンパイル時有理数
fraction
であり、1ティックから次のティックまでの時間を秒単位で表します。
duration
に格納される唯一のデータは、型
Rep
のティックカウントです。
Rep
が浮動小数点型の場合、
duration
はティックの小数部分を表現できます。
Period
はdurationの型の一部として含まれ、異なるduration間の変換時にのみ使用されます。
目次 |
メンバー型
| メンバー型 | 定義 |
rep
|
Rep
算術型、または算術型を模倣するクラスで、ティック数を表す
|
period
|
Period
(C++17まで)
typename
Period
::
type
(C++17以降)
、
std::ratio
ティック周期(1ティックあたりの秒の分数)を表す
|
メンバー関数
|
新しいdurationを構築する
(public member function) |
|
|
内容を代入する
(public member function) |
|
|
ティック数のカウントを返す
(public member function) |
|
|
[static]
|
特別なduration値zeroを返す
(public static member function) |
|
[static]
|
特別なduration値minを返す
(public static member function) |
|
[static]
|
特別なduration値maxを返す
(public static member function) |
|
単項+と単項-を実装する
(public member function) |
|
|
ティック数をインクリメントまたはデクリメントする
(public member function) |
|
|
2つのduration間の複合代入を実装する
(public member function) |
非メンバー関数
|
期間を引数とする算術演算を実装する
(関数テンプレート) |
|
|
(C++11)
(C++11)
(C++20で削除)
(C++11)
(C++11)
(C++11)
(C++11)
(C++20)
|
2つの期間を比較する
(関数テンプレート) |
|
(C++11)
|
期間を異なる刻み間隔の別の期間に変換する
(関数テンプレート) |
|
(C++17)
|
期間を別の期間に変換し、切り下げを行う
(関数テンプレート) |
|
(C++17)
|
期間を別の期間に変換し、切り上げを行う
(関数テンプレート) |
|
(C++17)
|
期間を別の期間に変換し、最近接偶数への丸めを行う
(関数テンプレート) |
|
(C++17)
|
期間の絶対値を取得する
(関数テンプレート) |
|
(C++20)
|
duration
に対するストリーム出力を実行する
(関数テンプレート) |
|
(C++20)
|
指定されたフォーマットに従ってストリームから
duration
を解析する
(関数テンプレート) |
ヘルパー型
以下の表で使用される型 /* intXX */ は、少なくともXXビットの符号付き整数型を意味します。
| 型 | 定義 |
std::chrono::nanoseconds
|
std :: chrono :: duration < /* int64 */ , std:: nano > |
std::chrono::microseconds
|
std :: chrono :: duration < /* int55 */ , std:: micro > |
std::chrono::milliseconds
|
std :: chrono :: duration < /* int45 */ , std:: milli > |
std::chrono::seconds
|
std :: chrono :: duration < /* int35 */ > |
std::chrono::minutes
|
std :: chrono :: duration < /* int29 */ , std:: ratio < 60 >> |
std::chrono::hours
|
std :: chrono :: duration < /* int23 */ , std:: ratio < 3600 >> |
std::chrono::days
(C++20以降)
|
std :: chrono :: duration < /* int25 */ , std:: ratio < 86400 >> |
std::chrono::weeks
(C++20以降)
|
std :: chrono :: duration < /* int22 */ , std:: ratio < 604800 >> |
std::chrono::months
(C++20以降)
|
std :: chrono :: duration < /* int20 */ , std:: ratio < 2629746 >> |
std::chrono::years
(C++20以降)
|
std :: chrono :: duration < /* int17 */ , std:: ratio < 31556952 >> |
注意: 事前定義された期間型はそれぞれ、
hours
まで、少なくとも±292年の範囲をカバーします。
|
各定義済み期間型
|
(C++20以降) |
ヘルパークラス
|
std::common_typeトレイトの特殊化
(クラステンプレートの特殊化) |
|
|
(C++11)
|
期間が異なるティック周期を持つ期間に変換可能であることを示す
(クラステンプレート) |
|
(C++11)
|
指定された型のティックカウントのゼロ、最小、最大値を構築する
(クラステンプレート) |
duration
のフォーマットサポート
(クラステンプレートの特殊化) |
|
|
std::chrono::duration
のハッシュサポート
(クラステンプレートの特殊化) |
ヘルパー特殊化
|
template
<
class
Rep,
class
Period
>
constexpr
bool
enable_nonlocking_formatter_optimization
<
chrono
::
duration
<
Rep, Period
>>
|
(C++23以降) | |
この
std::enable_nonlocking_formatter_optimization
の特殊化は、テンプレートパラメータ
Rep
がそれを有効にする場合に、
chrono::duration
オブジェクトを出力するための
std::print
および
std::println
の効率的な実装を可能にします。
リテラル
|
インライン名前空間で定義
std::literals::chrono_literals
|
|
|
(C++14)
|
時間を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
分を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
秒を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
ミリ秒を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
マイクロ秒を表す
std::chrono::duration
リテラル
(関数) |
|
(C++14)
|
ナノ秒を表す
std::chrono::duration
リテラル
(関数) |
|
注: リテラルサフィックス
|
(C++20以降) |
注記
期間オブジェクト
d
が保持する実際の時間間隔(秒単位)は、おおよそ
d.
count
(
)
*
D
::
period
::
num
/
D
::
period
::
den
に等しくなります。ここで
D
は
chrono::duration<>
型であり、
d
はその型のオブジェクトです。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_chrono_udls
|
201304L
|
(C++14) | 時間型に対するユーザー定義リテラル |
例
この例では、いくつかのカスタム期間型を定義し、型間で変換する方法を示します:
#include <chrono> #include <iostream> using namespace std::chrono_literals; template<typename T1, typename T2> using mul = std::ratio_multiply<T1, T2>; int main() { using microfortnights = std::chrono::duration<float, mul<mul<std::ratio<2>, std::chrono::weeks::period>, std::micro>>; using nanocenturies = std::chrono::duration<float, mul<mul<std::hecto, std::chrono::years::period>, std::nano>>; using fps_24 = std::chrono::duration<double, std::ratio<1, 24>>; std::cout << "1 second is:\n"; // integer scale conversion with no precision loss: no cast std::cout << std::chrono::milliseconds(1s).count() << " milliseconds\n" << std::chrono::microseconds(1s).count() << " microseconds\n" << std::chrono::nanoseconds(1s).count() << " nanoseconds\n"; // integer scale conversion with precision loss: requires a cast std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count() << " minutes\n"; // alternative to duration_cast: std::cout << 1s / 1min << " minutes\n"; // floating-point scale conversion: no cast std::cout << microfortnights(1s).count() << " microfortnights\n" << nanocenturies(1s).count() << " nanocenturies\n" << fps_24(1s).count() << " frames at 24fps\n"; }
出力:
1 second is: 1000 milliseconds 1000000 microseconds 1000000000 nanoseconds 0 minutes 0 minutes 0.82672 microfortnights 0.316887 nanocenturies 24 frames at 24fps