2017-01-18 2 views
1

Может ли кто-нибудь объяснить приоритет оператора, который имеет место в следующем выражении C++?Приоритет оператора C++

int lower = height[height[l] < height[r] ? l++ : r--];

Предположим, height=[0,1,0,2,1,0,1,3,2,1,2,1] и int l = 0, r = height.size()-1;. В соответствии с моим пониманием сначала оценивается height[l] < height[r]?, а затем l++ или r-- в качестве примера может быть (l++ в этом случае). Затем значение height[updated l] должно быть присвоено lower. Таким образом, lower должен быть 1; но на выходе указано, что это 0. Как? Каков был бы правильный порядок оценки заявлений?

ответ

3

l++ использует оператор post-increment. Значение l увеличивается после оценки значения выражения. Таким образом, когда l равно 0, значение l++ равно 0, а не 1, хотя после этого переменная l будет иметь значение 1.

Использование ++l показало бы другое поведение.

Следующее утверждение в вопросе неправилен:

Тогда значение высоты [обновлено л] следует отнести к снижению

Обновленное значение л не используется в качестве массива index, но значение выражения l++, которое является значением l до его увеличения.

+0

Спасибо. Не могли бы вы сообщить мне полный порядок оценки выражения 'int lower = height [height [l]

+3

@ user6490375 Заказ указан, как вы заявили, но вы получили неправильный приращение. –

+1

Обратите внимание, что значение 'l ++' не определяется приоритетом оператора. Это просто определено так. – EJP

1

l++ - оператор пост-приращения, что означает, что он будет увеличен после завершения операции. Следовательно, выход 0, все остальное верно.

-1

код равен:

int lower = height[height[l] < height[r] ? l : r]; 
(height[l] < height[r]) ? l+=1 : r-=1; 
Смежные вопросы