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 之间有什么区别 的相关文章

  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • C++ 私有静态成员变量

    此 C 代码在编译时产生链接器错误 A h class A public static void f private static std vector
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • double 类型的静态类成员的常量表达式初始值设定项

    在 C 11 和 C 14 中 为什么我需要constexpr在下面的代码片段中 class Foo static constexpr double X 0 75 而这会产生编译器错误 class Foo static const doub
  • 实体框架代理创建

    我们可以通过使用来停止在上下文构造函数中创建代理 this Configuration ProxyCreationEnabled false 在 EF 4 1 中创建代理有哪些优点和缺点 代理对于两个功能是必需的 延迟加载 导航属性在第一次
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 编译器可以报告未知属性的错误吗?即使有范围?

    在N3291 7 6 1 3 5 属性语法和语义 decl attr grammar 关于如何属性是用我读过的源代码写的 使用一个属性范围令牌是有条件支持的 实现定义的行为 and For an 属性标记本国际标准中未指定 该行为是实现定义
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs

随机推荐

  • 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当第一次遇到这个库时 然而 该库中有一致的命名约定 有