C++ std::无法打印32/64位以下的计时持续时间的不同结果

C++ std::无法打印32/64位以下的计时持续时间的不同结果,c++,c++17,chrono,C++,C++17,Chrono,我使用std::chrono #包括 #包括 #包括 班级计时器 { 标准::时钟::稳定时钟::最后一个时间点; 标准::时钟::稳定时钟::持续时间; 布尔开始{}; 公众: 计时器(bool start=false) { 如果(启动) { last=std::chrono::stable_clock::now(); 开始=真; std::cout发生问题的原因是您没有初始化持续时间,因此UB 请看我想这条线上只有UB duration += (std::chrono::steady_clo

我使用
std::chrono

#包括
#包括
#包括
班级计时器
{
标准::时钟::稳定时钟::最后一个时间点;
标准::时钟::稳定时钟::持续时间;
布尔开始{};
公众:
计时器(bool start=false)
{
如果(启动)
{
last=std::chrono::stable_clock::now();
开始=真;

std::cout发生问题的原因是您没有初始化
持续时间,因此UB


请看

我想这条线上只有UB

duration += (std::chrono::steady_clock::now() - last);
因为
持续时间
未初始化

如果初始化
持续时间
成员

std::chrono::steady_clock::duration duration{};

一切正常。

@walnut所以它必须进行值初始化?哦,我很愚蠢。我的错误是,默认的默认构造函数仍然会导致值初始化先初始化为零,这对于非默认的默认构造函数是不正确的。所以一切正常。@walnut啊,好的,有一秒钟非常困惑:pSee对于解释
duration
的默认构造函数。基本上,它的行为类似于基本的算术类型。
duration += (std::chrono::steady_clock::now() - last);
std::chrono::steady_clock::duration duration{};