最終更新日時:
が更新

履歴 編集

function
<chrono>

std::chrono::duration::コンストラクタ(C++11)

constexpr duration() = default;                       // (1)

template <class Rep2>
constexpr explicit duration(const Rep2& r);           // (2)

template <class Rep2, class Period2>
constexpr duration(const duration<Rep2, Period2>& d); // (3)

duration(const duration&) = default;                  // (4)

概要

  • (1) : デフォルトコンストラクタ。
  • (2) : rep型に変換可能な型の値からdurationを構築する。
  • (3) : 他のテンプレートパラメータを持つdurationからdurationを構築する。
  • (4) : コピーコンストラクタ

備考

  • (2) : treat_as_floating_point<rep>::value == trueもしくはtreat_as_floating_point<Rep2>::value == falseの場合にオーバーロード解決される。
  • (3) : この関数は、以下の条件を満たす場合にオーバーロード解決される。
    • C++11 : treat_as_floating_point<rep>::value == true
    • C++14 : 単位変換の結果としてオーバーフローせず、treat_as_floating_point<rep>::value == true
    • もしくは、treat_as_floating_point<rep>::value == falseかつratio_divide<Period2, period>::type::den == 1
    • これらの要求は、整数ベースのduration型間での変換の際に、暗黙に切り捨て誤差が起きるのを防ぐ。浮動小数点数型ベースの場合には、精度が下がれば小数点以下の数値になるだけなので問題ない。

#include <iostream>
#include <chrono>

using std::chrono::duration;

int main()
{
  duration<int, std::milli> d1;        // デフォルト構築 d1.count()は未初期化の値
  duration<int, std::milli> d2 {};     // デフォルト構築 d1.count()の値は0

  duration<int, std::milli> d3(3);     // 値を指定して構築(ミリ秒)
  duration<int, std::micro> d4 = d3;   // ミリ秒からマイクロ秒に変換

  duration<int, std::micro> d5 = d4;   // コピー

  std::cout << "d2 : " << d2.count() << std::endl;
  std::cout << "d3 : " << d3.count() << std::endl;
  std::cout << "d4 : " << d4.count() << std::endl;
  std::cout << "d5 : " << d5.count() << std::endl;
}

出力

d2 : 0
d3 : 3
d4 : 3000
d5 : 3000

バージョン

言語

  • C++11

処理系

参照