C ++ вложенный условный оператор порядок вычисления

Для выражения как

x = a ? b : c ? d : e;

Я понимаю, что, поскольку оператор?: Имеет правильную ассоциативность, выражение сгруппировано как

x = a ? b : (c ? d : e);

Однако как насчет порядка оценки? Означает ли ассоциативность, что сначала вычисляется ветвь (c? D: e), а затем ее ответ передается как аргумент влево?: Оператор? Или сначала выполняется оценка, а затем в зависимости от того, возвращается ли b или оценивается ветвь (c? D: e)? Или это не определено?

0

Решение

N3376 5,16 / 1

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

5

Другие решения

Для условного оператора:

  • первый операнд вычисляется первым;
  • либо второе, либо третье (но не оба) оценивается в зависимости от значения первого.
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector