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
以上の整数型か、浮動小数点数型であることcharT
はchar
かwchar_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" |
値num
をPeriod::type::num
、値den
をPeriod::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 ❌