оператор '+' унарный или бинарный?

0

Читая эту статью, кажется, что оператор + унарный. Как так. По моему мнению, унарный оператор является оператором, который не зависит от другой переменной для ее работы, например ++a или a--. Как переменная "+" унарная. Я думал, что он двоичный? Буду признателен, если кто-нибудь сможет это прояснить.

  • 2
    Есть унарный плюс ( +x ) и двоичный плюс ( a + b ). Он должен иметь в виду только один.
  • 0
    Под одинарными они подразумевают, что его можно использовать для обозначения знака. Как в (-) for negative и (+) for positive
Теги:
operator-overloading

2 ответа

6
Лучший ответ

+ является и унарным, и двоичным оператором. +a + форма (+a) заставляет операнд оцениваться как число или указатель, тогда как бинарная форма + форма (a + b) является добавлением.

Унарное +, как правило, противоположно Унарный -; применение его к любому числовому значению не изменит его. (+1 == 1) Однако у него есть некоторые виды использования, включая принуждение массива к распаду в указатель:

template <typename T> void foo(const T &) { }

void test() {
    int a[10];

    foo(a);  // Calls foo<int[10]>()
    foo(+a); // Calls foo<int*>()
}

(Демо)

Это то же самое касается операторов - и *. У вас есть -a (отрицание) и a - b (вычитание); *a (разыменование указателя) и a * b (умножение).

Вы перегружаете обе версии по-разному. Для перегрузки через функции-члены:

public:
    T operator+() const;          // Unary
    T operator+(const U &) const; // Binary

Как и при любой другой перегрузке оператора, обе формы могут возвращать значение, отличное от своего закрывающего типа; например, у вас может быть класс строк, чей operator+() возвращает числовой тип. Это будет соответствовать соглашению унитарного + оценивающего его операнд как число.

Вы можете также перегрузить эти операторы как свободные функции:

T operator+(const U &);            // Unary, called on type U and returns T.
T operator+(const U &, const V &); // Binary, called on types U and V and returns T.
  • 0
    Помечено как ответ. Спасибо
  • 0
    Я думаю, что для вопроса C ++ вы должны привести пример, как перегрузить унарный и двоичный оператор плюс.
Показать ещё 1 комментарий
1

Unary +, как в +a, определяется как дополнение унарного - (-a). Это "дефолт", поэтому на самом деле не часто, если он когда-либо использовался. Однако он может использоваться с переменными, относящимися к классам, где он может быть перегружен, чтобы иметь значение класса. Так что это совсем не бесполезно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню