Этот код взят из обсуждения, которое идет здесь .
someInstance.Fun(++k).Gun(10).Sun(k).Tun();
Четко ли определен этот код? Вычисляется ли ++ k
в Fun () перед k
в Sun ()?
Что, если k
является типом, определяемым пользователем, а не встроенным тип? И чем порядок вызовов функций выше отличается от этого:
eat(++k);drink(10);sleep(k);
Насколько я знаю, в обеих ситуациях существует точка последовательности после каждого вызова функции . Если так, то почему первый случай не может быть так же четко определен, как и второй?
В разделе 1.9.17 стандарта C ++ ISO говорится следующее о точках последовательности и оценке функций:
При вызове функции ( будь то или не функция встроенная), есть точка последовательности после оценки всех аргументов функции (если есть) , который происходит до выполнения любые выражения или утверждения в тело функции . Также есть точка последовательности после копирования возвращаемое значение и перед выполнение любых выражений за пределами функция .