名前空間
変種
操作

std::chrono::duration_cast

提供: cppreference.com
< cpp‎ | chrono‎ | duration
 
 
 
日付と時間のユーティリティ
(C++11)
(C++11)
時計
(C++20)
                                                  
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
カレンダー
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
タイムゾーン
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
C スタイルの日付と時間
 
 
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

[編集] ノート

この関数は、 ToDurationstd::chrono::duration の特殊化でなければ、オーバーロード解決に参加しません。

変換元の刻み幅が変換後の刻み幅で割り切れる場合 (hours からminutes など) の整数の duration 間のキャストや、浮動小数点の duration 間のキャストは、通常のキャストや std::chrono::duration のコンストラクタによる暗黙の変換で行うことができ、 duration_cast は必要ありません。

浮動小数点の duration から整数の duration へのキャストは、その浮動小数点値が NaN、無限大、または変換後の整数型で表現できないほど大きい場合、未定義動作の対象です。 そうでなければ、整数の duration へのキャストは、整数型への static_cast の場合と同様に、切り捨てが行われます。

[編集]

この例は関数の実行時間を計測します。

#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)

[編集] 関連項目

time point を同じ時計の異なる時間単位の time point に変換します
(関数テンプレート) [edit]
時間を別の時間に切り捨て変換します
(関数テンプレート) [edit]
時間を別の時間に切り上げ変換します
(関数テンプレート) [edit]
時間を別の時間の最も近い値に丸めて変換します
(関数テンプレート) [edit]