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