Честный ответ: я не знаю.

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

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

РЕДАКТИРОВАТЬ Хорошо, я не сказал это явно, но: конечно, я имел в видуx быть пользовательским типом. Для встроенных типов,(x+=2)-1 конечно лучше чем(++x)++, а такжеx+1 этомного лучше чем(++x)--, Ситуация, которую я имею в виду, это итератор для довольно сложного типа полуассоциативного контейнера, где операторы+= а также+ (предназначенные для произвольного доступа) должны перестроить кэш, чтобы эффективно работать для общих запросов, и поэтому они на порядок медленнее, чем++, Но, конечно, я могу изменить их, чтобы всегда сначала проверять, является ли аргумент очень маленьким целым числом, и в этом случае просто вызватьoperator++ несколько раз вместо выполнения процедуры произвольного доступа. Это должно работать нормально, хотя я мог бы предположить, что в какой-то момент у меня может возникнуть ситуация, в которой я хочуoperator+= всегда идти по пути произвольного доступа, независимо от того, насколько маленькими числами я его представляю.

Итак ... для меня я бы заключил, что ответ будет:

преимущество наличия простого и хорошо запоминающегося списка приоритетов, в которомвсе операторы postfix предшествуютЛюбые префиксных операторов достаточно, чтобы допустить незначительный недостаток, заключающийся в необходимости всегда использовать скобки для составления пре- и постфиксных операторов.++/--Так как эта композиция используется очень редко.

Более простое «C делает это таким образом», в то время как, вероятно,реальный причина, гораздо менее удовлетворительным для меня, потому что с++x++ не было разрешеновообще в Си было бы возможно переопределить эту самую композицию, не повреждая любой существующий код.

Во всяком случае, я буду продолжать использовать(++x)--, как скобки действительно не так больно.

Ответы на вопрос(3)

Ваш ответ на вопрос