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

C++ 输出流中引用的奇怪行为,c++,cout,time.h,C++,Cout,Time.h,我注意到将输出打印到流时的奇怪行为。我的代码循环遍历一个大数据集,并从每个项目中读取一个时间戳。存储第一项的时间戳,以便计算经过的时间 CurTime = ev[i].MidasTimeStamp; RunTimeElapsed = difftime(CurTime,StartTime); cout << "StartTime: " << ctime(&StartTime) << "CurTime: " << ctime(&CurT

我注意到将输出打印到流时的奇怪行为。我的代码循环遍历一个大数据集,并从每个项目中读取一个时间戳。存储第一项的时间戳,以便计算经过的时间

CurTime = ev[i].MidasTimeStamp;
RunTimeElapsed = difftime(CurTime,StartTime);
cout << "StartTime: " << ctime(&StartTime) << "CurTime: " << ctime(&CurTime) << "Elapsed: " << RunTimeElapsed << " s" << endl;  
但如果将打印行拆分为两行:

cout << "StartTime: " << ctime(&StartTime); 
cout << "CurTime: " << ctime(&CurTime) << "Elapsed: " << RunTimeElapsed << " s" << endl; 
两个输出之间的唯一变化是到cout线。这很容易解决,但我想了解发生了什么

来自以下文件:

返回的值指向其有效性或值为的内部数组 可通过随后调用asctime或ctime进行更改

未指定表达式中子表达式的求值顺序。特别是,编译器可以先调用
ctime
两次,然后从以下文档中调用
运算符:

返回的值指向其有效性或值为的内部数组 可通过随后调用asctime或ctime进行更改

未指定表达式中子表达式的求值顺序。特别是,编译器可以先调用
ctime
两次,然后从以下文档中调用
运算符:

返回的值指向其有效性或值为的内部数组 可通过随后调用asctime或ctime进行更改

未指定表达式中子表达式的求值顺序。特别是,编译器可以先调用
ctime
两次,然后从以下文档中调用
运算符:

返回的值指向其有效性或值为的内部数组 可通过随后调用asctime或ctime进行更改


未指定表达式中子表达式的求值顺序。特别是,编译器先调用
ctime
两次,然后再调用
操作符是合法的。非常感谢你,我对这一点真是摸不着头脑。很抱歉,我在文档中遗漏了这一点。@Carl那么,当你自己不调用
free()
,你怎么会认为
ctime()
返回指针导致的内存泄漏被填满了呢?@oswald这是一种多么令人讨厌的回应方式!我认为从我最初的问题中可以清楚地看出,ctime()返回指针的意义我没有意识到。谢天谢地,其他人提供了一个有用的答案。@Carl请原谅我这种看似讨厌的回答方式。我只是想指出,无论什么时候从函数返回指针,都应该特别小心谁负责释放内存。非常感谢,我真的很抓狂。很抱歉,我在文档中遗漏了这一点。@Carl那么,当你自己不调用
free()
,你怎么会认为
ctime()
返回指针导致的内存泄漏被填满了呢?@oswald这是一种多么令人讨厌的回应方式!我认为从我最初的问题中可以清楚地看出,ctime()返回指针的意义我没有意识到。谢天谢地,其他人提供了一个有用的答案。@Carl请原谅我这种看似讨厌的回答方式。我只是想指出,无论什么时候从函数返回指针,都应该特别小心谁负责释放内存。非常感谢,我真的很抓狂。很抱歉,我在文档中遗漏了这一点。@Carl那么,当你自己不调用
free()
,你怎么会认为
ctime()
返回指针导致的内存泄漏被填满了呢?@oswald这是一种多么令人讨厌的回应方式!我认为从我最初的问题中可以清楚地看出,ctime()返回指针的意义我没有意识到。谢天谢地,其他人提供了一个有用的答案。@Carl请原谅我这种看似讨厌的回答方式。我只是想指出,无论什么时候从函数返回指针,都应该特别小心谁负责释放内存。非常感谢,我真的很抓狂。很抱歉,我在文档中遗漏了这一点。@Carl那么,当你自己不调用
free()
,你怎么会认为
ctime()
返回指针导致的内存泄漏被填满了呢?@oswald这是一种多么令人讨厌的回应方式!我认为从我最初的问题中可以清楚地看出,ctime()返回指针的意义我没有意识到。谢天谢地,其他人提供了一个有用的答案。@Carl请原谅我这种看似讨厌的回答方式。我只是想指出,无论何时从函数返回指针,都应该特别小心谁负责释放内存。
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