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