gpt4 book ai didi

c++ - 输出流中引用的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 00:39:46 25 4
gpt4 key购买 nike

在将输出打印到流时,我注意到了奇怪的行为。我的代码循环遍历一个大型数据集,除其他外,还从每个项目中读取时间戳。存储第一项的时间戳,以便计算耗时。

CurTime = ev[i].MidasTimeStamp;
RunTimeElapsed = difftime(CurTime,StartTime);
cout << "StartTime: " << ctime(&StartTime) << "CurTime: " << ctime(&CurTime) << "Elapsed: " << RunTimeElapsed << " s" << endl;

打印到屏幕的输出显示同一时间打印两次,例如:

StartTime: Mon Sep 23 14:44:57 2013
CurTime: Mon Sep 23 14:44:57 2013
Elapsed: 360 s

但是如果将打印行分成两行:

cout << "StartTime: " << ctime(&StartTime); 
cout << "CurTime: " << ctime(&CurTime) << "Elapsed: " << RunTimeElapsed << " s" << endl;

我得到了预期的输出:

StartTime: Mon Sep 23 14:44:57 2013
CurTime: Mon Sep 23 14:50:57 2013
Elapsed: 360 s

两个输出之间的唯一变化是 cout 行。这很容易解决,但我想了解发生了什么。

最佳答案

来自 ctime 上的文档:

The returned value points to an internal array whose validity or value may be altered by any subsequent call to asctime or ctime.

表达式中子表达式的求值顺序未指定。特别是,编译器调用 ctime 是合法的先打两次,再打operator<<有必要的。这就是您的情况。

关于c++ - 输出流中引用的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437943/

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