Точки следования C++
Выражение может изменить значение объекта только один раз между следующими друг за другом точками следования.
Блок, относящийся только к системам Microsoft
В языке C++ в настоящее время точки следования не определены. В Microsoft C++ для любого выражения, содержащего операторы C и не содержащего перегруженные операторы, используются те же точки следования, что и в ANSI C. Когда операторы перегружены, семантика изменяется с последовательности операторов на последовательность вызовов функций. В Microsoft C++ используются следующие точки следования.
Левый операнд оператора логического И (&&). Перед продолжением полностью вычисляется левый операнд оператора логического И и учитываются все побочные эффекты. Гарантии вычисления правого операнда оператора логического И нет.
Левый операнд оператора логического ИЛИ (||). Перед продолжением полностью вычисляется левый операнд оператора логического ИЛИ и учитываются все побочные эффекты. Гарантии вычисления правого операнда оператора логического ИЛИ нет.
Левый операнд оператора запятой. Перед продолжением полностью вычисляется левый операнд оператора запятой и учитываются все побочные эффекты. Оба операнда оператора запятой вычисляются всегда.
Оператор вызова функции. До входа в функцию вычисляются выражение вызова функции и все ее аргументы, включая аргументы по умолчанию, а также учитываются все побочные эффекты. Порядок вычисления аргументов и выражения вызова функции не определен.
Первый операнд условного оператора. Перед продолжением полностью вычисляется первый операнд условного оператора и учитываются все побочные эффекты.
Конец полного выражения инициализации, например конец инициализации в операторе объявления.
Выражение в операторе выражения. Операторы выражения состоят из необязательного выражения с последующей точкой с запятой (;). Выражение полностью вычисляется для учета его побочных эффектов.
Управляющее выражение в операторе выбора (if или switch). До выполнения кода, зависящего от сделанного выбора, полностью вычисляется выражение и учитываются все побочные эффекты.
Управляющее выражение оператора while или do. До выполнения любых операторов в следующей итерации цикла while или do полностью вычисляется выражение и учитываются все побочные эффекты.
Каждое из трех выражений оператора for. До перехода к следующему выражению полностью вычисляется каждое выражение и учитываются все побочные эффекты.
Выражение в операторе return. До возврата управления в вызывающую функцию полностью вычисляется выражение и учитываются все побочные эффекты.