gpt4 book ai didi

c++ - 用零初始化 std::chrono::time_point 变量

转载 作者:行者123 更新时间:2023-12-05 04:48:47 25 4
gpt4 key购买 nike

我有一个名为 last_timestamp_ 的变量,声明如下:

using TimePoint = std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<double>> TimePoint last_timestamp_

我想用零初始化它,我该怎么做?谢谢

最佳答案

using TimePoint = std::chrono::time_point<std::chrono::system_clock, 
std::chrono::duration<double>>;
TimePoint last_timestamp_{};

它实际上也可以在没有 {} 的情况下工作,但恕我直言,明确地对其进行零初始化是更好的风格。

您可以通过两种方式阅读:

  1. 它在内部将 last_timestamp_ 的值设置为 0.0s 或其纪元。
  2. 它将 last_timestamp_ 设置为 1970-01-01 00:00:00 UTC。

您可以说第二部分的原因是因为它是所有实现跟踪的事实标准 Unix Time在 C++11/14/17 中使用 system_clock。对于 C++20,此行业惯例为 officially specified .

重要说明:此规范严格适用于基于system_clocktime_point。不能为所有 chrono time_point 假设这个纪元。

根据评论推测您的使用方式:

while (...)
{
if (std::chrono::system_clock::now() > last_timestamp_ + threshold)
{
// now() - last_timestamp_ > threshold
...
last_timestamp_ = std::chrono::system_clock::now();
}
};

假设 threshold 不大于 51 年,您的第一次迭代将为真。

只是为了让您的代码面向 future ,值得评论:

TimePoint last_timestamp_{};  // 1970-01-01

现在,如果您出于任何原因更改时钟,您知道您可能必须重新访问此初始值。例如,在某些平台上,file_clock 的纪元将在很远的将来,如果切换到 file_clock,则会破坏此代码。 C++20 提供了使这种初始化更明确的语法:

using namespace std::chrono_literals;
TimePoint last_timestamp_ = std::chrono::sys_days{1970y/1/1};

现在注释是不必要的。

关于c++ - 用零初始化 std::chrono::time_point 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67899119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com