Странное поведение из ссылок в выходном потоке

Я заметил странное поведение при печати вывода в поток. Мой код проходит по большому набору данных и, среди прочего, читает метку времени каждого элемента. Временная метка из первого элемента сохраняется, поэтому можно рассчитать прошедшее время.

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

Единственное изменение между двумя выходами касалось линии (ов) касания. Это достаточно легко обойти, но я бы хотел понять, что происходит.

0

Решение

Из документации по ctime:

Возвращаемое значение указывает на внутренний массив, действительность или значение
может быть изменено любым последующим вызовом asctime или ctime.

Порядок вычисления подвыражений в выражении не указан. В частности, для компилятора допустимо вызывать ctime сначала дважды, затем позвоните operator<< как необходимо. Это то, что происходит в вашем случае.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]