2015-01-14 4 views
0

Для выражения какC++ вложенных условного порядка оператора оценки

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

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

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

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

+0

, даже если бы я знал ассоциативность наизусть, я бы всегда использовал круглые скобки для ясности – TemplateRex

+0

'1> 2? cout << "yes": cout << "no"; ' –

ответ

5

n3376 5,16/1

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

+0

Я правильно понимаю:« a »преобразуется в bool, а затем, если это правда,« b »- результат, а если он ложный, (c? d: e) оценивается? – JamesLens

+0

@JamesLens да. – ForEveR

1

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

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