namespace std {
namespace chrono {
// time_point - duration = time_point
template <class Clock, class Duration1, class Rep2, class Period2>
time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type>
operator-(const time_point<Clock, Duration1>& lhs,
const duration<Rep2, Period2>& rhs); // (1) C++11
// time_point - duration = time_point
template <class Clock, class Duration1, class Rep2, class Period2>
constexpr time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type>
operator-(const time_point<Clock, Duration1>& lhs,
const duration<Rep2, Period2>& rhs); // (1) C++14
// time_point - time_point = duration
template <class Clock, class Duration1, class Duration2>
typename common_type<Duration1, Duration2>::type
operator-(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& rhs); // (2) C++11
// time_point - time_point = duration
template <class Clock, class Duration1, class Duration2>
constexpr typename common_type<Duration1, Duration2>::type
operator-(const time_point<Clock, Duration1>& lhs,
const time_point<Clock, Duration2>& rhs); // (2) C++14
}}
概要
time_pointの減算を行う。
- (1) :
time_pointから時間間隔を減算する - (2) :
time_point同士の差を求める
戻り値
- (1) : 戻り値の型を
CTとして、
return CT(lhs.time_since_epoch() - rhs);
- (2)
return lhs.time_since_epoch() - rhs.time_since_epoch();
例
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
int main()
{
using time_point = chrono::system_clock::time_point;
time_point now = chrono::system_clock::now();
// (1)
time_point tp1 = now - chrono::seconds{3};
auto sec1 = chrono::duration_cast<chrono::seconds>(tp1.time_since_epoch());
std::cout << sec1.count() << std::endl;
// (2)
auto sec2 = chrono::duration_cast<chrono::seconds>(now - tp1);
std::cout << sec2.count() << std::endl;
}
出力例
1572329112
3
バージョン
言語
- C++11
処理系
- Clang: 3.2 ✅
- GCC: 4.6.1 ✅
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅
参照
- N3469 Constexpr Library Additions: chrono, v3
- LWG Issue 2739. Issue with
time_pointnon-member subtraction with anunsignedduration- C++17で、(1)の戻り値が
CT(lhs.time_since_epoch() - rhs)に変更され、符号なしdurationで負符号化による予期しないオーバーフローが起きないようになった
- C++17で、(1)の戻り値が