Почему постфиксный оператор ++ имеет более высокий приоритет, чем префиксный оператор ++?

Определенный таким образом, мы не можем делать ни ++ x ++ , ни ++ x - . Но, с другой стороны, оба (++ x) ++ и (++ x) - являются полезными выражениями: (++ x) ++ приращения x на два и возвращает значение «посередине», тогда как (++ x) - по существу эквивалентно x + 1 , но полностью избавляет от необходимости вызывать ] оператор + , который иногда может быть весьма полезен.

Итак, почему не определен приоритет, чтобы ++ x ++ автоматически расширялся до (++ x) ++ а не ++ (x ++) ? Есть ли какой-то скрытый смысл в последнем, которого я не понимаю, или это просто для того, чтобы сохранить приоритет в виде простого списка со всеми префиксными операторами, составляющими один единственный уровень?

EDIT Хорошо, я не делал явно скажи это, но: конечно, я имел в виду x как определяемый пользователем тип. Для встроенных типов (x + = 2) -1 , конечно, лучше, чем (++ x) ++ , а x + 1 - это лот лучше, чем (++ x) - . Я имею в виду итератор довольно сложного типа полуассоциативного контейнера, где операторы + = и + (предназначенные для произвольного доступа) должны перестраивать cache, чтобы эффективно работать с общими запросами, и поэтому они на порядок медленнее, чем ++ . Но, конечно, я могу изменить их, чтобы всегда сначала проверять, является ли аргумент очень маленьким целым числом, и в этом случае просто повторно вызывайте operator ++ вместо выполнения процедуры произвольного доступа.

11
задан leftaroundabout 22 May 2011 в 22:12
поделиться