草庐IT

c++ - 按值或引用 const 传递 std::chrono::duration?

所以在过去,我通过引用const传递了std::chrono::duration值,但现在我认为它们只不过是包装在一个类中的单一算术类型,所以它有意义按值传递。有人介绍过吗? 最佳答案 根据规范,duration包装了Rep中指定类型的单个变量(滴答数)template>classduration;所以基本上您可以选择处理复制/传递constref,就像您对该Rep类型所做的那样。当我以前使用chromo::duration时,我选择它是一个long,在那种情况下,我没有看到通过const引用传递的理由,(尤其是在我的体系结构中,一

c++ - std::chrono::time_point 无效值

boost/std::chrono::time_pointmy_time_point(/*invalidvalue*/);我需要存储一个无效/无意义/标记值。我怎么可能那样做? 最佳答案 您可以使用boost::optional(或std::optional,如果您支持C++17)表示chrono::time_point的无效状态:#include#includeintmain(){usingmy_clock=std::chrono::system_clock;usingmy_time_point=std::chrono::time

c++ - std::chrono::duration_cast 1 秒和 2 秒的奇怪结果

我正在运行一个简单的程序,其中,我使用system_clock::now获取一个time_point,然后使用this_thread::sleep_for(seconds(1))和time_point与system_clock::now。现在,如果我向第一个time_point添加一些额外的duration,它会在1秒和2秒内给出完全相同的结果!这是democode:#include#include#includeusingnamespacestd;voidCheckDuration(std::chrono::durationseconds){autostart=std::chrono

c++ - <chrono> 溢出保证

我有这段代码:autotime_point_a=std::chrono::high_resolution_clock::now();while(true){autotime_point_b=std::chrono::high_resolution_clock::now();autocounter_ms=std::chrono::duration_castcounter_ms.count()是否保证始终返回有效值?count()有可能抛出吗?如果counter_ms超过其基础整数类型的大小(我认为它是longlong),会发生什么情况?我的程序将连续运行几天,我需要知道如果/当count

c++ - 为什么 std::chrono::duration 基于秒

我在学习库,并考虑std::chrono::duration类,是否有任何特定理由将其基于秒数?例如,存储秒数的变量是chrono::durationtwo_seconds(2);所有其他时间跨度都需要将它们与秒相关联,例如chrono::duration>two_minutes(2);chrono::duration>two_milliseconds(2);chrono::duration>two_days(2);是否有任何理由将持续时间设为秒而不是分钟、小时等? 最佳答案 选择秒是因为它是国际单位制和整个科学的基本时间单位。甚至

c++ - std::chrono 有多准确?

std::chrono宣称它可以将结果报告到纳秒级别。在典型的x86_64Linux或Windows机器上,人们期望它有多准确?例如,10ns、10µs、10ms和10s的测量误差条是多少? 最佳答案 这很可能取决于硬件和操作系统。例如,当我使用QueryPerformanceFrequency()询问Windows时钟频率是多少时,我得到3903987,如果你取它的倒数,你会得到大约256纳秒的时钟周期或分辨率。这是我的操作系统报告的值。根据文档,对于std::chrono,可表示的最小持续时间是high_resolution_c

c++ - 如何将 std::chrono 包装在 C++ 迭代器类型中

我尝试创建一个可迭代类型,它接收特定持续时间类型的模板参数,例如std::seconds、std::hours等,我希望它接收代表指定持续时间的time_points的参数2值,并且能够通过增加当前time_point在基于范围的for循环中使用这样的构造>按该持续时间或指定持续时间的单位,类似于以下内容:DateRangedr(now(),50);for(autod:dr){//dosomethingatunittime}我试过这样实现usingnamespacestd::chrono;template,typenameTime_pointer=Time_type*>classDat

c++ - std::string 到 std::chrono time_point

我有以下时间格式的字符串:“%Y-%m-%d%H:%M:%S.%f”其中%f是毫秒,例如:14:31:23.946571我想把它作为chronotime_point。有Actor阵容吗? 最佳答案 std::string没有转换至std::chrono::time_point.你必须建立std::chrono::time_point对象。使用除微秒以外的所有内容来构造std::tm对象()。年份应基于1900,而不是0。月份应基于0,而不是1。使用std::mktime()创建一个std::time_t目的。创建std::chron

c++ - std::chrono 中是否有设施来协助注入(inject) system_clock 进行单元测试

我依赖于可能响应也可能不响应的硬件。因此,我经常以编写带有超时的函数而告终。系统时间是脆弱单元测试的已知来源,因此注入(inject)受控且稳定的时间似乎是测试的好主意。我想知道std::chrono中是否有任何工具可以帮助解决这个问题。我看到的替代方案是围绕系统时间编写一个包装器并依赖于该适配器。这是包装器的外观的最小示例。#pragmaonce#include#include#include#includeusingstd::chrono::system_clock;usingstd::chrono::milliseconds;usingstd::shared_ptr;usings

c++ - 对 `boost::chrono::system_clock::now()' 的 undefined reference - Boost 和 cpp-netlib

我来这里是为了解决让我感到沮丧的情况。很多。首先,我在Windows上,我使用MinGW作为编译器(C++)。我在让程序使用cpp-netlib和SSL(尝试发布到https站点)时遇到了一些问题。我相信一切都井井有条,除了这个一直在逃避我的错误。C:\boost_1_50_0\boost_1_50_0\stage\lib\libboost_thread-mgw46-mt-1_50.a(thread.o):thread.cpp||对“boost::chrono::system_clock::now()”的undefinedreference我确信我已经链接到chrono,以及BOOST