gpt4 book ai didi

C++11 std::chrono 现在减去最小值

转载 作者:可可西里 更新时间:2023-11-01 16:15:25 24 4
gpt4 key购买 nike

我觉得我对这个有点疯狂,但这对我来说没有意义。在我看来,如果我从 now() 调用返回的任何时间点中减去最小时间点,我应该总是得到一个正的持续时间,但这种情况并没有发生。

#include <chrono>
#include <iostream>

typedef std::chrono::steady_clock myclock;

int main(int argc, char **argv) {
myclock::time_point min = myclock::time_point::min();
myclock::time_point now = myclock::now();
auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(now - min).count();
std::cout << millis << std::endl;
}

为什么打印的是负整数而不是正整数? (clang 3.3 或 g++ 4.8.1)

最佳答案

正如已经指出的那样,这是溢出的结果。请记住,有符号类型可以表示的最小值与最大值大致相同。如果 now 为正,则 nowmin 之间的差值明显大于 min,这意味着具有比类型的最大值可以表示的更大的量级。

如果你想保证一个正的持续时间,那么你可以使用稳定的时钟而不是使用最小时间,然后使用程序开始时间作为基础。内置时钟持续时间均已指定,因此持续时间应该能够代表至少几百年的范围,因此除非您的程序运行时间超过该时间,否则您将获得正持续时间。

另一种选择是选择一个已知时代过去的时钟,然后简单地说

Clock::now().time_since_epoch();

关于C++11 std::chrono 现在减去最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21794974/

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