名前空間
変種
操作

std::chrono::duration_cast

提供: cppreference.com
< cpp‎ | chrono‎ | duration
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ(C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
日付と時間のユーティリティ
(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 スタイルの日付と時間
 
 
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)

[編集]関連項目

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