2014-11-09 5 views
0

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

+2

Унарный плюс ('+ x') и двоичный плюс (' a + b'). Он должен иметь в виду только один. – 0x499602D2

+0

Унарные, они означают, что его можно использовать для указания знака. Как в '(-) для отрицательных' и' (+) для положительных' – saruftw

ответ

6

+ является и унарным, и двоичным оператором. Форма унарного + (+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*>() 
} 

(Demo)

Это та же сделка с - и * операторов. У вас есть -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

Отмечено как ответ. Спасибо – MistyD

+0

Я думаю, что для вопроса на C++ вы должны привести пример, как перегрузить унарный и двоичный плюс. – kay

+1

@ Kay Я добавлю это сейчас. – cdhowie

1

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

Смежные вопросы