c++ - 从 “LLONG_MAX seconds”构造一个std::chrono::毫秒变量时会发生什么?

标签 c++ chrono

从“LLONG_MAX秒”构造一个std::chrono::milliseconds变量时,结果t_milli.count() -1000

auto t_max_seconds = std::chrono::seconds(LLONG_MAX);
auto t_milli = std::chrono::milliseconds(t_max_seconds);

据我所知,“ -1 ”来自“LLONG_MAX”,而“ 1000 ”是比率。
(以“微秒”为单位,结果为-1'000'000)

我想知道这里发生了什么,是溢出还是未定义的行为?

最佳答案

secondsmilliseconds的转换中,您将获得签名溢出。

在您的计算机上,secondsmilliseconds均由带符号的64位整数表示。但是要将seconds转换为milliseconds,库要乘以1000。

您正在有效地执行此操作:

cout << LLONG_MAX*1000 << '\n';

在我的机器上打印出来的:
-1000

关于c++ - 从 “LLONG_MAX seconds”构造一个std::chrono::毫秒变量时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61748256/

相关文章:

c++ - 如何使用Chrono vs ctime库输入设置的开始时间和结束时间

c++ - 如何在 C++20 chrono 中为日期添加天数?

c++ - c++ chrono是否具有正常的舍入功能,该值在平局时从0舍入?

c++ - fmt和Howard Hinnant的日期:为什么从fmt::to_string “{}”? fmt和日期的最佳做法?

c++ - 这个矩阵乘法有什么问题?

c++ - 为什么(不相关的)using 声明可以通过参数依赖查找调和重载歧义?

c++ - QGestureRecognizer 自动被QGestureManager 销毁?

c++ - 如何保证一个类至少有一个实例?

c++ - C++向chrono::system_clock::time_point添加月份

c++ - 我如何决定是否为新的 C++ 项目使用 ATL、MFC、Win32 或 CLR?