从“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)
我想知道这里发生了什么,是溢出还是未定义的行为?
最佳答案
从seconds
到milliseconds
的转换中,您将获得签名溢出。
在您的计算机上,seconds
和milliseconds
均由带符号的64位整数表示。但是要将seconds
转换为milliseconds
,库要乘以1000。
您正在有效地执行此操作:
cout << LLONG_MAX*1000 << '\n';
在我的机器上打印出来的:
-1000
关于c++ - 从 “LLONG_MAX seconds”构造一个std::chrono::毫秒变量时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61748256/