c++11 日期和时间工具(std::chrono::duration)(二)
定义于头文件 <chrono>
template< class Rep, class Period = std::ratio<1> > class duration;
类模板 std::chrono::duration 表示时间间隔。
它由 Rep 类型的计次数和计次周期组成,其中计次周期是一个编译期有理数常量,表示从一个计次到下一个的秒数。
存储于 duration 的数据仅有 Rep 类型的计次数。若 Rep 是浮点数,则 duration 能表示小数的计次数。 Period 被包含为时长类型的一部分,且只在不同时长间转换时使用。
实现一元 + 和一元 -
std::chrono::duration<Rep,Period>::operator+(unary),
std::chrono::duration<Rep,Period>::operator-(unary)
constexpr duration operator+() const; | (1) | (C++17 前) | |
constexpr std::common_type_t<duration> operator+() const; | (C++17 起) | ||
constexpr duration operator-() const; | (2) | (C++17 前) | |
constexpr std::common_type_t<duration> operator-() const; | (C++17 起) |
实现 duration 的一元加和一元减。
若 rep_
为 duration 对象中保有计次数的成员变量,而 D
是返回类型,则
1) 等价于 return D(*this);
2) 等价于 return D(-rep_);
参数
(无)
返回值
1) 此 duration 对象的副本
2) 此 duration 对象的副本,对其计次数取反
调用示例
#include <chrono>
#include <iostream>
int main()
{
std::chrono::seconds s1(10);
std::chrono::seconds s2 = -s1;
std::cout << "negated 10 seconds are " << s2.count() << " seconds\n";
}
递增或递减滴答计数
std::chrono::duration<Rep,Period>::operator++,
std::chrono::duration<Rep,Period>::operator--
duration& operator++(); | (1) | (C++17 前) |
constexpr duration& operator++(); | (C++17 起) | |
duration operator++(int); | (2) | (C++17 前) |
constexpr duration operator++(int); | (C++17 起) | |
duration& operator--(); | (3) | (C++17 前) |
constexpr duration& operator--(); | (C++17 起) | |
duration operator--(int); | (4) | (C++17 前) |
constexpr duration operator--(int); | (C++17 起) |
自增或自减此 duration 的计次数。
若 rep_
是 duration 对象中保有计次数的成员变量,则
1) 等价于 ++rep_; return *this;
2) 等价于 return duration(rep_++)
3) 等价于 --rep_; return *this;
4) 等价于 return duration(rep_--);
参数
(无)
返回值
1,3) 到修改后的此 duration 的引用
2,4) 修改前所做的 duration 副本
调用示例
#include <chrono>
#include <iostream>
int main()
{
std::chrono::hours h(1);
std::chrono::minutes m = ++h;
m--;
std::cout << m.count() << " minutes\n";
}
实现二个时长间的复合赋值
std::chrono::duration<Rep,Period>::operator+=, -=, *=, /=, %=
duration& operator+=(const duration& d); | (1) | (C++17 前) |
constexpr duration& operator+=(const duration& d); | (C++17 起) | |
duration& operator-=(const duration& d); | (2) | (C++17 前) |
constexpr duration& operator-=(const duration& d); | (C++17 起) | |
duration& operator*=(const rep& rhs); | (3) | (C++17 前) |
constexpr duration& operator*=(const rep& rhs); | (C++17 起) | |
duration& operator/=(const rep& rhs); | (4) | (C++17 前) |
constexpr duration& operator/=(const rep& rhs); | (C++17 起) | |
duration& operator%=(const rep& rhs); | (5) | (C++17 前) |
constexpr duration& operator%=(const rep& rhs); | (C++17 起) | |
duration& operator%=(const duration& rhs); | (6) | (C++17 前) |
constexpr duration& operator%=(const duration& rhs); | (C++17 起) |
在二个拥有同一周期的时长或时长和计次值之间进行复合赋值。
若 rep_
是此 duration 对象中保有计次数的成员变量,则
1) 等价于 rep_ += d.count(); return *this;
2) 等价于 rep_ -= d.count(); return *this;
3) 等价于 rep_ *= rhs; return *this;
4) 等价于 rep_ /= rhs; return *this;
5) 等价于 rep_ %= rhs; return *this;
6) 等价于 rep_ %= d.count(); return *this;
参数
d | - | 运算符右侧的 duration |
rhs | - | 运算符右侧的计次数 |
返回值
到修改后的此 duration 的引用
调用示例
#include <chrono>
#include <iostream>
int main()
{
std::chrono::minutes m(11);
m *= 2;
m += std::chrono::hours(10); // 小时可隐式转换成分
std::cout << m.count() << " minutes equals "
<< std::chrono::duration_cast<std::chrono::hours>(m).count()
<< " hours and ";
m %= std::chrono::hours(1);
std::cout << m.count() << " minutes\n";
}