C++ 在cout中执行算术时计时持续时间\u cast不工作
我不理解以下行为C++ 在cout中执行算术时计时持续时间\u cast不工作,c++,casting,iostream,chrono,C++,Casting,Iostream,Chrono,我不理解以下行为 unsigned long begin_time = \ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count(); //some code here std::cout << "time diff with arithmetic in cout: " << \
unsigned long begin_time = \
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count();
//some code here
std::cout << "time diff with arithmetic in cout: " << \
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count() - begin_time << std::endl;
unsigned long time_diff = \
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count() - begin_time;
std::cout << "time_diff: " << time_diff << std::endl;
无符号长开始时间=\
std::chrono::duration_cast(std::chrono::staddy_clock::now().time_since_epoch()).count();
//这里有一些代码
std::cout您可能溢出了无符号long
(sizeof为4):
无符号长开始时间=\
std::chrono::duration_cast(std::chrono::staddy_clock::now().time_since_epoch()).count();
建议:
using namespace std::chrono;
auto begin_time = steady_clock::now();
//some code here
std::cout << "time diff with arithmetic in cout: " <<
duration_cast<milliseconds>(steady_clock::now() - begin_time).count() << std::endl;
使用名称空间std::chrono;
自动开始时间=稳定时钟::现在();
//这里有一些代码
std::coutduration\u cast
没有什么问题,问题是无符号long
的大小不足以处理从epoch开始的毫秒时间。我从ideone获得以下输出:
Max value for `unsigned long`: 4294967295
Milliseconds since epoch: 15426527488
我通过直接输出获得毫秒数:
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count() << std::endl;
std::我可以在MSVS 2015上重新发布它,但不能在g++或clang上重新发布。@NathanOliver是的,我想这可能与编译器有关。不幸的是,目前我只能访问一个编译器,就是我用来获取上述结果的编译器。实际上,我很好奇为什么你不保留持续时间,然后在获得结束时间后对持续时间进行转换。我发现更易于阅读和使用,并且在所有编译器上都得到相同的值。一旦使用.count()
逃离
系统的类型安全性,您就更容易出现运行时错误。尽可能长时间地延迟使用.count()
和time\u since\u epoch()
,如果您必须使用它们的话。
Max value for `unsigned long`: 4294967295
Milliseconds since epoch: 15426527488
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch()).count() << std::endl;