输出流中引用的奇怪行为
Strange behaviour from references in an output stream
我注意到将输出打印到流时出现奇怪的行为。 我的代码循环遍历一个大型数据集,除其他外,从每个项目中读取时间戳。 存储第一项的时间戳,以便可以计算经过的时间。
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
的文档:
返回值指向其有效性或值的内部数组 可能会通过任何后续对 ASCtime 或 CTIME 的调用来更改。
未指定表达式中子表达式的计算顺序。特别是,编译器先调用ctime
两次,然后根据需要调用operator<<
是合法的。这似乎是你的情况下发生的事情。
相关文章:
- 如何在C++中编写 ostream 的向量,它接收所有不同的输出流,如 cout、ostringstream 和 ofs
- 在输出流中插入换行符
- 在类外部重载输入和输出流
- 通用容器的输出流
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 获取C++输出流中元素的大小
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 控制多线程程序中的输出流
- 为什么输出流首选" "而不是""?
- C++ 输出流运算符 <<() 中的字符何时加宽?
- 音频缓冲区列表,用于输出流格式已压缩的 AUHAL 单元
- 如何将值发送到标准输出流并在另一个程序中访问这些值
- 我必须如何将OpenCV输出流到我自己的远程C GUI
- 如何为提升日志和自定义类型定义输出流运算符
- 修改视频帧并将其发送回视频输出流
- 组合输入和输出流
- 输出流中引用的奇怪行为
- 为什么返回类型引用输出流
- 如何更改c++输出流以引用cout ?