std::chrono::duration_cast
提供: cppreference.com
<tbody>
</tbody>
template <class ToDuration, class Rep, class Period> constexpr ToDuration duration_cast(const duration<Rep,Period>& d); |
(C++11以上) | |
std::chrono::duration を異なる型 ToDuration の duration に変換します。
暗黙の変換は使用されません。 引数のいずれかが 1 であることがコンパイル時に判明すれば、乗算や除算は可能な限り回避されます。 計算は利用可能な最も広い幅で行われ、最後に結果の型に (static_cast で行われたかのように) 変換されます。
引数
| d | - | 変換する duration |
戻り値
ToDuration 型の duration に変換された d。
ノート
この関数は、 ToDuration が std::chrono::duration の特殊化でなければ、オーバーロード解決に参加しません。
変換元の刻み幅が変換後の刻み幅で割り切れる場合 (hours からminutes など) の整数の duration 間のキャストや、浮動小数点の duration 間のキャストは、通常のキャストや std::chrono::duration のコンストラクタによる暗黙の変換で行うことができ、 duration_cast は必要ありません。
浮動小数点の duration から整数の duration へのキャストは、その浮動小数点値が NaN、無限大、または変換後の整数型で表現できないほど大きい場合、未定義動作の対象です。 そうでなければ、整数の duration へのキャストは、整数型への static_cast の場合と同様に、切り捨てが行われます。
例
この例は関数の実行時間を計測します。
Run this code
#include <iostream>
#include <chrono>
#include <ratio>
#include <thread>
void f()
{
std::this_thread::sleep_for(std::chrono::seconds(1));
}
int main()
{
auto t1 = std::chrono::high_resolution_clock::now();
f();
auto t2 = std::chrono::high_resolution_clock::now();
// 浮動小数点の duration。 duration_cast は必要ありません。
std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
// 整数の duration。 duration_cast が必要です。
auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
// 整数の duration から、より短い割り切れる時間単位の整数の duration への変換。
// duration_cast は必要ありません。
std::chrono::duration<long, std::micro> int_usec = int_ms;
std::cout << "f() took " << fp_ms.count() << " ms, "
<< "or " << int_ms.count() << " whole milliseconds "
<< "(which is " << int_usec.count() << " whole microseconds)" << std::endl;
}
出力例:
f() took 1000.23 ms, or 1000 whole milliseconds (which is 1000000 whole microseconds)
関連項目
(C++11) |
時の間隔 (クラステンプレート) |
| time point を同じ時計の異なる時間単位の time point に変換します (関数テンプレート) | |
(C++17) |
時間を別の時間に切り捨て変換します (関数テンプレート) |
(C++17) |
時間を別の時間に切り上げ変換します (関数テンプレート) |
(C++17) |
時間を別の時間の最も近い値に丸めて変換します (関数テンプレート) |