порядок оценки подвыражений - PullRequest
0 голосов
/ 17 ноября 2009

Я смотрел на SO / IEC 9899: 201x в соответствии с J.1 Неуказанное поведение:

"The order in which subexpressions are evaluated and the order in which side effects
take place, except as specified for the function-call (), &&, ||, ?:, and comma
operators (6.5)."

Означает ли это, что в

func1() + func2();

func2 () может быть предварительно сформирован перед func1 () или даже во время func1 ()?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

В текущем стандарте (ISO / IEC 9899: 1999) существует точка последовательности между вызовами функций, но порядок вычисления операндов до + не указан, поэтому func1 может вызываться до или после * 1003. * но вызовы функций не должны перекрываться или чередоваться каким-либо образом.

Это означает, что каждый из func1 и func2 может, при желании, взаимодействовать с некоторыми общими данными без непредвиденного изменения этих данных.

1 голос
/ 17 ноября 2009

Не во время, но обязательно, либо 1, затем 2, либо 2, затем 1.

...