Если Вы перегружаетесь - как оператор - (), он должен использоваться слева от объекта, однако перегружаясь () как оператор () () он используется направо от объекта. Как мы знаем, какой оператор должен использоваться слева и которые использоваться справа?
Посмотрите на диаграмму приоритета оператора. Это скажет вам, с каким направлением ассоциируется (связывается) оператор. Обратите внимание, что некоторые операторы имеют несколько форм с разными значениями, например, бинарные и унарные -
. В таких случаях у вас может быть несколько перегрузок, например:
T operator-()
и:
T operator-(const T &o)
Компилятор выбирает нужную, основываясь на синтаксической интерпретации оператора.
См. также этот полезный набор рекомендаций.
Большинство унарных операторов можно размещать только с определенной стороны своего операнда. Для двух особых случаев, ++
и -
, см. этот FAQ .