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