Не должны ли постфиксные операторы рассматриваться как бинарные операторы

Постфиксные операторы принимают int параметр. Уже есть вопрос почему, и кажется, что ответ:Потому что так сказал Бьярне Страуструп«

Мне неудобно с этим ответом. Если Бьярне Страуструпу нужно что-то, что заставит компилятор вести себя иначе, почему он не может просто отключить, возвращает ли оператор ссылку? Это оставляет меня под вопросом:

  1. Почему я не могу сделать: foo++ 13;
  2. Почему не int параметр по умолчанию равен 1
  3. Почему это считается унарным оператором вообще, он принимает аргумент

0

Решение

Если Бьярне Страуструпу нужно что-то, что заставит компилятор вести себя иначе, почему он не может просто отключить, возвращает ли оператор ссылку?

Потому что вы не можете перегрузить функцию в зависимости от типа возвращаемого значения. Это параметры, квалификация const и эталонная квалификация, для которых функция может быть перегружена

Почему я не могу сделать: foo++ 13;

Поскольку (int) Параметр только для разрешения перегрузки. Вы не принимаете это или используете параметр.

Почему не int параметр по умолчанию равен 1

Опять не используется. Он просто сообщает компилятору, является ли он префиксной или постфиксной версией.

Почему это считается унарным оператором вообще, он принимает аргумент

Это на самом деле не принимает аргумент. Параметр только для того, чтобы сделать их разными. Он влияет только на один операнд и работает с ним, поэтому он является унарным оператором.

6

Другие решения

Ответить на вопрос в заголовке: в foo++, ++ это явно унарный оператор. Тот факт, что его реализация может выглядеть как бинарный оператор, если вы щуритесь на него, не изменится как это используется, и это то, что делает его одинарным.

2