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;