我有一个名为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_{};
它实际上也可以在没有
{}
的情况下工作,但恕我直言,显式地将其零初始化是更好的风格。
您可以通过两种方式阅读:
last_timestamp_
的值设置为 0.0s
或其纪元。last_timestamp_
设置为 1970-01-01 00:00:00 UTC。您可以说第二部分的原因是因为它是事实上的标准,所有实现都在 C++11/14/17 中使用 system_clock
跟踪
Unix Time。对于 C++20,此行业惯例已正式指定。
重要提示: 本规范严格适用于基于
time_point
的 system_clock
。人们无法为所有 chrono time_point
s 假设这个纪元。
从评论中推测您的使用情况如下:
while (...)
{
if (std::chrono::system_clock::now() > last_timestamp_ + threshold)
{
// now() - last_timestamp_ > threshold
...
last_timestamp_ = std::chrono::system_clock::now();
}
};
假设
threshold
不超过 51 年,您的第一次迭代将是正确的。
为了让你的代码面向未来,值得评论:
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};
现在评论已经没有必要了。
方法 std::chrono::time_point::min() 表示最小可能值,即您正在寻找的“零”。
std::chrono::time_point my_time = std::chrono::time_point::min();