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{};