Files
cppdraft_translate/cppdraft/time/point.md
2025-10-25 03:02:53 +03:00

13 KiB
Raw Blame History

[time.point]

30 Time library [time]

30.6 Class template time_point [time.point]

30.6.1 General [time.point.general]

🔗

namespace std::chrono {template<class Clock, class Duration = typename Clock::duration>class time_point {public:using clock = Clock; using duration = Duration; using rep = typename duration::rep; using period = typename duration::period; private: duration d_; // exposition onlypublic:// [time.point.cons], constructconstexpr time_point(); // has value epochconstexpr explicit time_point(const duration& d); // same as time_point() + dtemplateconstexpr time_point(const time_point<clock, Duration2>& t); // [time.point.observer], observerconstexpr duration time_since_epoch() const; // [time.point.arithmetic], arithmeticconstexpr time_point& operator++(); constexpr time_point operator++(int); constexpr time_point& operator--(); constexpr time_point operator--(int); constexpr time_point& operator+=(const duration& d); constexpr time_point& operator-=(const duration& d); // [time.point.special], special valuesstatic constexpr time_point min() noexcept; static constexpr time_point max() noexcept; };}

1

#

If Duration is not a specialization of duration, the program is ill-formed.

30.6.2 Constructors [time.point.cons]

🔗

constexpr time_point();

1

#

Effects: Initializes d_ with duration::zero().

Such a time_point object represents the epoch.

🔗

constexpr explicit time_point(const duration& d);

2

#

Effects: Initializes d_ with d.

Such a time_point object represents the epoch + d.

🔗

template<class Duration2> constexpr time_point(const time_point<clock, Duration2>& t);

3

#

Constraints: is_convertible_v<Duration2, duration> is true.

4

#

Effects: Initializes d_ with t.time_since_epoch().

30.6.3 Observer [time.point.observer]

🔗

constexpr duration time_since_epoch() const;

1

#

Returns: d_.

30.6.4 Arithmetic [time.point.arithmetic]

🔗

constexpr time_point& operator++();

1

#

Effects: Equivalent to: ++d_.

2

#

Returns: *this.

🔗

constexpr time_point operator++(int);

3

#

Effects: Equivalent to: return time_point{d_++};

🔗

constexpr time_point& operator--();

4

#

Effects: Equivalent to: --d_.

5

#

Returns: *this.

🔗

constexpr time_point operator--(int);

6

#

Effects: Equivalent to: return time_point{d_--};

🔗

constexpr time_point& operator+=(const duration& d);

7

#

Effects: Equivalent to: d_ += d.

8

#

Returns: *this.

🔗

constexpr time_point& operator-=(const duration& d);

9

#

Effects: Equivalent to: d_ -= d.

10

#

Returns: *this.

30.6.5 Special values [time.point.special]

🔗

static constexpr time_point min() noexcept;

1

#

Returns: time_point(duration::min()).

🔗

static constexpr time_point max() noexcept;

2

#

Returns: time_point(duration::max()).

30.6.6 Non-member arithmetic [time.point.nonmember]

🔗

template<class Clock, class Duration1, class Rep2, class Period2> constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>> operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);

1

#

Returns: CT(lhs.time_since_epoch() + rhs), where CT is the type of the return value.

🔗

template<class Rep1, class Period1, class Clock, class Duration2> constexpr time_point<Clock, common_type_t<duration<Rep1, Period1>, Duration2>> operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs);

2

#

Returns: rhs + lhs.

🔗

template<class Clock, class Duration1, class Rep2, class Period2> constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>> operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);

3

#

Returns: CT(lhs.time_since_epoch() - rhs), where CT is the type of the return value.

🔗

template<class Clock, class Duration1, class Duration2> constexpr common_type_t<Duration1, Duration2> operator-(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

4

#

Returns: lhs.time_since_epoch() - rhs.time_since_epoch().

30.6.7 Comparisons [time.point.comparisons]

🔗

template<class Clock, class Duration1, class Duration2> constexpr bool operator==(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

1

#

Returns: lhs.time_since_epoch() == rhs.time_since_epoch().

🔗

template<class Clock, class Duration1, class Duration2> constexpr bool operator<(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

2

#

Returns: lhs.time_since_epoch() < rhs.time_since_epoch().

🔗

template<class Clock, class Duration1, class Duration2> constexpr bool operator>(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

3

#

Returns: rhs < lhs.

🔗

template<class Clock, class Duration1, class Duration2> constexpr bool operator<=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

4

#

Returns: !(rhs < lhs).

🔗

template<class Clock, class Duration1, class Duration2> constexpr bool operator>=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

5

#

Returns: !(lhs < rhs).

🔗

template<class Clock, class Duration1, [three_way_comparable_with](cmp.concept#concept:three_way_comparable_with "17.12.4Concept three_­way_­comparable[cmp.concept]")<Duration1> Duration2> constexpr auto operator<=>(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

6

#

Returns: lhs.time_since_epoch() <=> rhs.time_since_epoch().

30.6.8 Conversions [time.point.cast]

🔗

template<class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> time_point_cast(const time_point<Clock, Duration>& t);

1

#

Constraints: ToDuration is a specialization of duration.

2

#

Returns: time_point<Clock, ToDuration>(duration_cast(t.time_since_epoch()))

🔗

template<class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> floor(const time_point<Clock, Duration>& tp);

3

#

Constraints: ToDuration is a specialization of duration.

4

#

Returns: time_point<Clock, ToDuration>(floor(tp.time_since_epoch())).

🔗

template<class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> ceil(const time_point<Clock, Duration>& tp);

5

#

Constraints: ToDuration is a specialization of duration.

6

#

Returns: time_point<Clock, ToDuration>(ceil(tp.time_since_epoch())).

🔗

template<class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> round(const time_point<Clock, Duration>& tp);

7

#

Constraints: ToDuration is a specialization of duration, andtreat_as_floating_point_v<typename ToDuration::rep> is false.

8

#

Returns: time_point<Clock, ToDuration>(round(tp.time_since_epoch())).