Четко ли определен этот код?

Этот код взят из обсуждения, которое идет здесь .

someInstance.Fun(++k).Gun(10).Sun(k).Tun();

Четко ли определен этот код? Вычисляется ли ++ k в Fun () перед k в Sun ()?

Что, если k является типом, определяемым пользователем, а не встроенным тип? И чем порядок вызовов функций выше отличается от этого:

eat(++k);drink(10);sleep(k);

Насколько я знаю, в обеих ситуациях существует точка последовательности после каждого вызова функции . Если так, то почему первый случай не может быть так же четко определен, как и второй?

В разделе 1.9.17 стандарта C ++ ISO говорится следующее о точках последовательности и оценке функций:

При вызове функции ( будь то или не функция встроенная), есть точка последовательности после оценки всех аргументов функции (если есть) , который происходит до выполнения любые выражения или утверждения в тело функции . Также есть точка последовательности после копирования возвращаемое значение и перед выполнение любых выражений за пределами функция .

27
задан Community 23 May 2017 в 11:44
поделиться