Это правильная реализация.Типично, что постфиксный оператор будет ухудшать производительность, потому что вам нужно создать еще одну копию, прежде чем делать приращение (и именно поэтому я привык всегда использовать префикс, если мне не нужно что-то еще).
При возврате по ссылке вы возвращаете ссылку на l-значение для текущего объекта.Компилятор обычно реализует это, возвращая адрес текущего объекта.Это означает, что возвращать объект так же просто, как и возвращать число.
Однако при возврате по значению необходимо выполнить копирование.Это означает, что во время возврата есть больше информации для копирования (а не просто адрес), а также конструктор копирования для вызова.Вот тут-то и возникает ваша производительность.
Эффективность вашей реализации выглядит на уровне типичных реализаций.
РЕДАКТИРОВАТЬ: Что касается вашего дополнения, нет, они не являются псевдонимами.Вы создали два отдельных объекта.При возврате по значению (и при создании нового объекта из оператора приращения постфикса) этот новый объект помещается в отдельную ячейку памяти.
Однако в следующем коде a и b являются псевдонимами:
int a = 0;
int& b = ++a;
b - это адрес, который ссылается на a.