当前位置: 首页 > news >正文

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";
}

相关文章:

  • DataStructure_树的基本性质(m叉树和二叉树)
  • Flask 学习-76.Flask-RESTX 处理异常@api.errorhandler
  • Java Boolean类中booleanValue()方法具有什么功能呢?
  • c# 与stm32之间结构体的收发
  • java集合专题Map接口及HashMap/Hashtable/Properties使用方法底层结构及源码分析
  • Vue(六)——vuex
  • JavaScript 学习-47.export 和 import 的使用
  • Kafka 生产者
  • Spring核心IOC的核心类解析
  • 【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
  • 软件测试分类
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • var、let、const的区别
  • 机器学习(二十九):LightGBM 模型
  • node.js 使用教程-2.Gulp 打包构建入门与使用
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • “大数据应用场景”之隔壁老王(连载四)
  • 【Linux系统编程】快速查找errno错误码信息
  • 78. Subsets
  • CSS实用技巧干货
  • Elasticsearch 参考指南(升级前重新索引)
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java第三方包学习之lombok
  • Nacos系列:Nacos的Java SDK使用
  • node和express搭建代理服务器(源码)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • vuex 笔记整理
  • vue总结
  • Vultr 教程目录
  • 百度小程序遇到的问题
  • 使用 QuickBI 搭建酷炫可视化分析
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 通过几道题目学习二叉搜索树
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 移动端 h5开发相关内容总结(三)
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​渐进式Web应用PWA的未来
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • .naturalWidth 和naturalHeight属性,
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET简谈设计模式之(单件模式)
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [dfs] 图案计数
  • [ffmpeg] 定制滤波器
  • [iOS]-UIKit
  • [J2ME]url请求返回参数非法(java.lang.illegalArgument)