gpt4 book ai didi

c++ - std::cout 在 32/64 位下打印计时持续时间的不同结果

转载 作者:行者123 更新时间:2023-12-01 19:15:51 25 4
gpt4 key购买 nike

我使用 std::chrono 制作了一个简单的 Timer 类

#include <chrono>
#include <iostream>
#include <thread>

class Timer
{
std::chrono::steady_clock::time_point last;
std::chrono::steady_clock::duration duration;
bool started{};
public:
Timer(bool start = false)
{
if (start)
{
last = std::chrono::steady_clock::now();
started = true;
std::cout<<"started\n";
}
}
void pause()
{
if (started)
{
std::cout<<"paused\n";
duration += (std::chrono::steady_clock::now() - last);
started = false;
}
}
friend std::ostream& operator<<(std::ostream& os, Timer const& t);
~Timer()
{
pause();
std::cout << *this;
}
};

int main()
{
std::cerr << sizeof(size_t) << '\n'; //for indicating 32 or 64 bit
Timer t{true};
std::this_thread::sleep_for(std::chrono::seconds{ 1 });
}
std::ostream& operator<<(std::ostream& os, Timer const& t)
{
os << std::chrono::duration_cast<std::chrono::microseconds>(t.duration).count() << " ms.\n";
return os;
}

当使用-m32标志在GCC中编译32位时,它给出了荒谬的结果: link

4
started
paused
577755959817856 ms.

但是编译到64位时,结果看起来很正常:link

8
started
paused
1004260 ms.

编辑:是的,ms在这里有点误导,应该是μs,但我懒惰找到μ

最佳答案

我认为你在这条线上只有 UB,

duration += (std::chrono::steady_clock::now() - last);

因为duration未初始化。

如果初始化duration成员

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

一切正常。

关于c++ - std::cout 在 32/64 位下打印计时持续时间的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61178958/

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