2015-04-21 3 views
5

Недавно я увидел пример в перегрузке оператора, где они говорили о том, как оператор + по существу является функцией с двумя параметрами.C++ Что такое использование оператора +? и какова цель?

С немного тыкать я решил посмотреть на это немного глубже и обнаружил, что вызов + как функция действительно работает, просто не так, как можно было бы ожидать ... например:

int first = 6; 
int second = 9; 
int result = +(second,first);//result=6 

Сборки для этого

int result = +(second,first); 
mov   eax,dword ptr [first] 
mov   dword ptr [result],eax 

Звонок + просто перемещает последний параметр в eax.

Может ли кто-нибудь сказать мне цель этого и/или то, что он называется?

+2

хороший вопрос, я положу его в той же категории с (http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator) – vsoftco

+0

Увидев ответ, я думаю, что это супер справедливо. Я чувствую себя полным идиотом. – jhbh

+0

На самом деле я не был ироничным :) Это справедливый вопрос, и я уверен, что многие люди впервые вводят в заблуждение эту забавную форму, особенно если она имеет некоторый функциональный фон программирования. – vsoftco

ответ

11

Есть две части выражения +(second,first) - и ни один из них не является вызовом функции.

Выражение (second, first) использует редкие запятой оператор, который оценивает каждое выражение в свою очередь, и результат выражения является выражением последней оценивали.

+ в данном случае является лишь унарный оператор +, как говорят +5 или -8. Таким образом, результат вашего выражения равен 6, значение first.

Вы можете, однако, назвать operator + как это: [Что такое название «->» оператора]

int result = operator +(second, first); 
+1

Редкие? для (p = root, last = NULL; p! = NULL; last = p, p = p-> next) ;-) –

+0

@RichardPennington: Это намного реже обычного использования запятой, которая разделяет аргументы функции в вызове функции. –

+1

Нет 'operator +' для 'int'. (Ну, есть такая подпись, но только для целей разрешения перегрузки, ее нельзя назвать.) –

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