chrono::month 和 chrono::months 之间有什么区别

2024-01-10

C++20 chrono 类型/值之间有什么区别month{7} and months{7}?有两个如此相似的名字是不是很混乱?


是的,两者兼而有之可能会令人困惑month and months当第一次遇到这个库时。然而,该库中有一致的命名约定,有助于减少这种混乱。这样做的好处是可以清楚地分离不同的语义,同时保留简短直观的名称。

months

全部“预定义”chrono::duration类型是复数:

  • nanoseconds
  • microseconds
  • milliseconds
  • seconds
  • minutes
  • hours
  • days
  • weeks
  • months
  • years

So months is a chrono::duration type http://eel.is/c++draft/time.syn:



using months = duration<signed integer type of at least 20 bits,
                         ratio_divide<years::period, ratio<12>>>;
  

And it is exactly 1/12 of years.

static_assert(12*months{1} == years{1});

你可以像这样打印出来:

cout << months{7} << '\n';

输出是:

7[2629746]s

这读作 7 个单位,即 2,629,746。原来,2,629,746 秒是民历中月份的平均长度。换种说法:

static_assert(months{1} == 2'629'746s);

(除了中奖的酒吧投注外,具体数字并不是特别重要)

month

month(单数)另一方面是not a chrono::duration。它是一个历法说明符民历中一年中的一个月。或者:

static_assert(month{7} == July);

这可以用来形成这样的日期:

auto independence_day = month{7}/4d/2020y;

的代数month and months反映这些不同的语义。例如,“July + July”是无意义的,因此会出现编译时错误:

auto x = month{7} + month{7};
         ~~~~~~~~ ^ ~~~~~~~~
error: invalid operands to binary expression ('std::chrono::month' and 'std::chrono::month')

但这是完全有道理的:

auto constexpr x = month{7} + months{7};
static_assert(x == February);

和这个:

auto constexpr x = months{7} + months{7};
static_assert(x == months{14});

And yet:

auto b = February == months{14};
         ~~~~~~~~ ^  ~~~~~~~~~~
error: invalid operands to binary expression ('const std::chrono::month' and 'std::chrono::months')

I.e. month and months不仅不相等,甚至没有可比性。如果你喜欢用水果做类比的话,它们就是苹果和橙子。 ;-)

之间也存在类似的关系day and days。而之间year and years.


如果是复数,则为chrono::duration.


并且只有<chrono>具有类型安全性,可帮助您确保这两个语义上不同但相似的概念不会在代码中相互混淆。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chrono::month 和 chrono::months 之间有什么区别 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • if else key 分割 JSON

    我有这个功能 let input Apples Apples 501 82 Apples pos2 502 61 Apples pos3 502 61 Apples 502 16 let output Object keys input r
  • 拖动项目时触发的 click 事件 (Firefox)

    当我单击一个项目时 我可以编辑该字段 这要归功于引导程序可编辑 http vitalets github com bootstrap editable 当我拖放项目时 我可以更改项目的位置 这要归功于jquery ui sortable h
  • PhpStorm 中文件名旁边的神秘数字图标[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不小心按下了 PhpStorm 中的热键 现在我的一个文件名旁边有一个小数字图标 这是什么意思 我该如何删除它 这是一个屏幕截图 这是什
  • 查询在 while 循环中无法正常工作

    我有一个 While 循环 我试图插入 DECLARE CurrentOffer int 121 DECLARE OldestOffer int 115 DECLARE MinClubcardID bigint 0 DECLARE MaxC
  • PHP脚本在特定时间执行

    有没有一种简单的方法可以让 php 脚本在一天中的特定时间执行一些 html 例如 我的主页上有一个标题 有时我希望能够在标题下方添加一些内容 在本例中是一个 iframe 我知道每个人都提到了 cron 作业 但是这将如何工作呢 还有替代
  • 使用 CSS3 过渡的动画 jQuery UI 可排序

    我如何使用 CSS3 过渡 或任何其他方式 来制作jQuery 可排序 http jqueryui com sortable 其行为更像是 iOS 中的列表重新排序 其中列表项在拖动时会平滑地进行动画处理 因此当您拖动时 项会迅速移开 编辑
  • dc.js barChart 第一个和最后一个栏未完全显示

    我有一个条形图d3 time scalex 轴 我每小时显示一些数据 但使用时第一个和最后一个数据点条总是被切成两半centerBar true 当使用centerBar false 最后一个栏完全消失 时间窗口基于数据本身 计算如下 va
  • Apache Spark 中的递归方法调用

    我正在从 Apache Spark 上的数据库构建一个家谱 使用递归搜索来查找数据库中每个人的最终父级 即家谱顶部的人 假设搜索 id 时返回的第一个人是正确的父母 val peopleById peopleRDD keyBy f gt f
  • 给react中的动态数组元素一个图标

    我有一个动态数量的数组 例如 1 2 3 5 7 1 2 3 2 7 8 其中元素代表平台 ID 有助于唯一识别 PlayStation Xbox 等平台 I want to link a react icon https react ic
  • DirectX:如何绘制平滑的 2D 水(基于粒子的水)

    我最近使用粒子 1000 1500 工作 使用斯托克斯方程 进行水模拟 但我的问题是我使用 IDXSprite 它只是使用蓝色纹理四边形 7x7 绘制粒子 看起来不太平滑 是否有任何方法或已知技术来绘制此类系统 使表面看起来光滑 并且水不应
  • 如何更新 ActiveStorage 中的附件 (Rails 5.2)

    我最近将我的项目升级到最新的 Rails 版本 5 2 以获得ActiveStorage 一个处理附件上传到云服务 如 AWS S3 Google Cloud 等 的库 几乎一切都工作正常 我可以上传并附加图像 user avatar at
  • C#:使用具有多个图像的 .ico 文件

    我试图从包含两个图标的 ico 文件中设置 C 中的 TreeView 中的图像 32x32 版本和 16x16 版本 图像正在设置 但 Net 选择 32x32 版本 并将其缩小 看起来很糟糕 而不是选择现成的 16x16 图像 相关代码
  • aspnet core 中的部分视图发布子模型?

    我有一个视图 其中包含包含各种不同部分的选项卡 我将每个选项卡实现为部分视图 有一个 ViewModel 它具有各种子类来填充选项卡中的视图和部分视图 FormCaptureViewModel FormDetailViewModel For
  • C++链接器会自动内联函数(没有“inline”关键字,没有在标头中实现)吗?

    C 链接器是否会自动内联 传递 函数 这些函数未在标头中定义 并且未明确请求通过inline关键词 例如 发生以下情况so often 并且应该always受益于 内联 似乎每个编译器供应商都应该通过链接器通过 内联 自动 处理它 在可能的
  • Blazor 客户端应用程序级别异常处理

    如何全局处理客户端 Blazor 应用程序的应用程序级别异常 您可以创建一个处理 WriteLine 事件的单例服务 这只会在错误时被触发 这要归功于Console SetError this public class ExceptionN
  • liquibase - 变更集的执行顺序

    据我了解 Liquibase 根据更改日志中写入的顺序执行更改集 我希望变更集以另一个顺序运行 有没有办法改变变更集的执行顺序 如果能及时回复我的问题 我将不胜感激 Liquibase 中变更日志的顺序是根据需要部署 执行 更改的顺序 Li
  • 在 django-rest-framework-jwt 中存储超过默认信息

    我正在使用 Django 版本 1 8 并使用 django rest framework jwt 进行身份验证 身份验证后 我们的应用程序将返回前端信息 from rest framework jwt settings import ap
  • 如何将 uuid 添加到 log4j 以登录文件?

    我有这个 log4j2 xml 文件
  • 如何将本地文件上传到Carrierwave模型?

    我使用 Carrierwave 来处理图像上传 但我没有使用表单 而是使用服务器中的本地文件 我怎样才能做到这一点 user User first image path tmp pic s7b28 jpg user image image
  • chrono::month 和 chrono::months 之间有什么区别

    C 20 chrono 类型 值之间有什么区别month 7 and months 7 有两个如此相似的名字是不是很混乱 是的 两者兼而有之可能会令人困惑month and months当第一次遇到这个库时 然而 该库中有一致的命名约定 有