давайте возьмем простой пример: < /p>
Код: Выделить всё
int a=1; // Line 1
a = a++ + ++a; // Line 2
printf("%d",a); // Line 3
[*] Между оценкой левого и правого операнда && (logical
и), || (логично или) и операторы запятой
. Например, в выражении
*p ++! = 0 && *q ++! = 0 < /code>, все
побочные эффекты субэкспрессии
Код: Выделить всё
*p++ != 0между оценкой первого операнда тройного < BR /> «Вопросник» оператор и
второй или третий операнд. Например,
в выражении a = (*p ++)? ( *p ++): 0 < /code> Существует точка последовательности после
Первый *p ++ < /code>, что означает, что он уже
был увеличен к моменту того, как второй экземпляр
второй экземпляр выполнено. < /p>
< /li>
В конце полного выражения. Эта категория включает в себя операторы выражения
(например, назначение
Код: Выделить всё
a=b;< /code>), возвращаемые операторы,
управляющие выражениями if, переключатель,
while или do-while, и все
три выражения в операторе для A for. < /p>
< /li>
до того, как функция введена в вызов функции. Порядок, в котором
оцениваются аргументы, не указан
, но эта точка последовательности
означает, что все их побочные эффекты
завершены до того, как функция введена
Полем В выражении f (i ++)+g (j ++)+h (k ++) < /code>,
fисходного значения i ,
, но i увеличивается, прежде чем вводить
тело f Полем Точно так же J и k
обновляются перед введением g и h
соответственно. Тем не менее, не указано
, в котором заказ f () , g () , h ()
выполняется, и в каком порядке I , j < /code>,
Код: Выделить всё
kКод: Выделить всё
kне определен. BR/> оператор запятой и порядок оценки
для , b и c is
unprecified.
При возврате функции после того, как возвращаемое значение копируется в контекст вызова
. (Эта точка последовательности
указана только в стандарте C ++;
присутствует только неявно в
. li> в конце инициализатора; Например, после оценки 5
в объявлении int a = 5; < /code>. < /p>
< /li>
< /ol>
< /blockquote>
Таким образом, по точке # 3: < /p>
в конце полного выражения. Эта категория включает в себя операторы выражения (например, назначение a = b;), операторы возврата, контролирующие выражения if, switch, while или do-wy-wyle, и все три выражения в операторе для.
< /blockquote>
Код: Выделить всё
Line 2Теперь давайте возьмем другой пример:
Код: Выделить всё
int x=10,y=1,z=2; // Line 4
int result = x
Подробнее здесь: [url]https://stackoverflow.com/questions/5473107/what-is-the-relation-between-operator-precedence-and-order-of-evaluation[/url]
Мобильная версия