首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能在`std::chrono::sys_days`中添加‘`std::chrono::小时’

为什么不能在`std::chrono::sys_days`中添加‘`std::chrono::小时’
EN

Stack Overflow用户
提问于 2022-01-11 09:33:38
回答 1查看 324关注 0票数 4

在使用<chrono>库的第一步中,我将从天粒度time_point上的基本算术开始。由于@HowardHinnant的一个非常有用的帖子,我成功地编写了

代码语言:javascript
复制
#include <chrono>
using namespace std::chrono_literals;

int main()
{
    std::chrono::sys_days d {std::chrono::January/31/2022};
    d += std::chrono::days{2}; // ok
    //d += 48h; // error: no match for 'operator+=' with std::chrono::hours
}

我不清楚的是为什么不允许使用d += 48h;std::chrono::time_point<>::operator+=接受一个duration,表达式中的rvalue是一个std::chrono::hours,在我看来它代表了一个持续时间。这里的哲学是什么?根据度量单元,是否有不同的持续时间类型必须与time_point的粒度兼容?为什么?

另一方面,我理解为什么d += 2d;会出现错误,因为在本例中,std::literals::chrono_literals::operator""d是一个std::chrono::day,这不是一个持续时间(形成日期文本很方便,虽然在我看来有点不一致)。我想知道是否有一种更方便的方法来表示相当于std::chrono::days{2}的持续时间文本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 10:31:44

你可以把时间增加到几天。你不能做的就是再次隐式地将它转换为天。你需要一个演员

代码语言:javascript
复制
d = std::chrono::time_point_cast<std::chrono::days>(d + 48h);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70664433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档