最終更新日時(UTC):
が更新

履歴 編集

function
<chrono>

std::chrono::operator<<(C++20)

namespace std::chrono {
  template <class charT, class traits, class Rep, class Period>
  basic_ostream<charT, traits>&
    operator<<(basic_ostream<charT, traits>& os,
               const duration<Rep, Period>& d);  // (1) C++20
}

概要

durationオブジェクトを出力ストリームに出力する。

適格要件

  • Repは、整数変換ランクがshort以上の整数型か、浮動小数点数型であること
  • charTcharwchar_tであること

効果

以下のように実装し、durationオブジェクトdを出力ストリームosに出力する:

basic_ostringstream<charT, traits> s;
s.flags(os.flags());
s.imbue(os.getloc());
s.precision(os.precision());
s << d.count() << units_suffix;
return os << s.str();

ここでのunits_suffixは、Period::type単位型に以下のように対応する:

Period::type単位型 units_suffix
atto "as"
femto "fs"
pico "ps"
nano "ns"
micro "µs" ("\u00b5\u0073") もしくは"us"実装定義で選択される
milli "ms"
centi "cs"
deci "ds"
ratio<1> "s"
deca "das"
hecto "hs"
kilo "ks"
mega "Ms"
giga "Gs"
tera "Ts"
peta "Ps"
exa "Es"
ratio<60> "min"
ratio<3600> "h"
ratio<86400> "d"

numPeriod::type::num、値denPeriod::type::denをゼロ埋めなしの10進数で文字列化したものであるとして、

  • Period::type::den == 1である場合、units_suffix"[num]s"
  • いずれにもあてはまらない場合、units_suffix"[num/den]s"

戻り値

return os;

#include <iostream>
#include <chrono>

namespace chrono = std::chrono;

int main()
{
  std::cout << "nano sec : " << chrono::nanoseconds{3} << std::endl;
  std::cout << "milli sec : " << chrono::milliseconds{3} << std::endl;
  std::cout << "seconds : " << chrono::seconds{3} << std::endl;
  std::cout << "minutes : " << chrono::minutes{3} << std::endl;
  std::cout << "hours : " << chrono::hours{3} << std::endl;
  std::cout << "days : " << chrono::days{3} << std::endl;
  std::cout << "weeks : " << chrono::weeks{3} << std::endl;
  std::cout << "1/3 seconds : " << chrono::duration<int, std::ratio<1, 3>>{3} << std::endl;

  using float_seconds = chrono::duration<float, std::ratio<1>>;
  std::cout << "float sec : " << float_seconds{1.23f} << std::endl;
}

出力

nano sec : 3ns
milli sec : 3ms
seconds : 3s
minutes : 3min
hours : 3h
days : 3d
weeks : 3[604800]s
1/3 seconds : 3[1/3]s
float sec : 1.23s

バージョン

言語

  • C++20

処理系

  • Clang: (9.0時点で実装なし)
  • GCC: (9.2時点で実装なし)
  • Visual C++: (2019 Update 3時点で実装なし)

参照