Skip to content

Latest commit

 

History

History
129 lines (107 loc) · 4.52 KB

File metadata and controls

129 lines (107 loc) · 4.52 KB

operator<<

  • chrono[meta header]
  • std::chrono[meta namespace]
  • function[meta id-type]
  • cpp20[meta cpp]
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();
  • basic_ostringstream[link /reference/sstream/basic_ostringstream.md]
  • flags[link /reference/ios/ios_base/flags.md]
  • s.imbue[link /reference/ios/ios_base/imbue.md]
  • os.getloc()[link /reference/ios/ios_base/getloc.md]
  • precision[link /reference/ios/ios_base/precision.md]
  • s.str()[link /reference/sstream/basic_ostringstream/str.md]

ここでの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;
}
  • chrono::weeks[link /reference/chrono/duration_aliases.md]
  • std::ratio[link /reference/ratio/ratio.md]

出力

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時点で実装なし)

参照