Вот описание грамматики C ++ для выражений , которая определяет выражение присваивания как
assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
В простом английском языке выражение присваивания может быть условным выражением ИЛИунарное выражение, за которым следует оператор присваивания, за которым следует выражение присваивания.Итак, ваш следующий вопрос - «что такое условное выражение», и вы обращаетесь к этой части грамматики и продолжаете, пока не достигнете дна!
Итак, в C ++ вы можете видеть, что оператор, на который вы ссылались, может взять'условное выражение', как в C, но также и присваивание
Итак, с надетой 'C', вы смотрите на конечную a = d
часть оператора как присваивание, которое синтаксис C не должен 'я не могуВместо этого может показаться, что некоторые компиляторы разбирают последнюю часть оператора просто как a
, чтобы выдать
e = (a < d ? a++ : a) = d
Но в C ++ допустимо найти там назначение, поэтому a = d
принимаетсяв качестве окончательного выражения, так что вы получите
e = (a < d ? a++ : (a = d))