我有一个名为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
或其epoch - 它将
last_timestamp_
设置为1970-01-01 00:00:00 UTC
之所以可以说第二部分,是因为它是一个事实上的标准,即所有实现都使用C++11/14/17中的system_clock
跟踪Unix时间。对于C++20,这个行业实践已经被正式指定。
重要提示:本规范严格适用于基于system_clock
的time_point
。人们不能对所有的计时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年,您的第一次迭代将是正确的。
为了让你的代码经得起未来的考验,值得一提:
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};
现在没有必要发表评论了。