Является ли оператор функцией?

Является ли оператор функцией? Например при перегрузке оператора присваивания для определенного класса, мы можем вызвать его как обычную функцию. Но например является ли if функцией и т. д.


Ответы (2 шт):

Автор решения: Fat-Zer

Тут терминологическая путаница связанная с переводом английских терминов на русский язык:

  • statement (if, while, ; и т.д.) — наименьшая автономная часть языка программирования; программная команда. Как туманно говорит стандарт C11¹ (6.8/2): «То что задаёт действие, которое должно быть выполнено».

В русской традиции этот термин часто переводится, как оператор.

  • operator (+, -, *) — это обозначение (symbol), определяющее выполняемую операцию и обладающее собственной лексической и семантической значимостью (перефразировав C11 6.4.6/2).

    Для этого используют термин операция.

Так вот, в языке C++ нет перегрузки операторов (statement), есть перегрузка некоторых операций (operator). Также в литературе для перевода этой пары терминов часто используют пару терминов инструкция/оператор соответственно². Собственно из-за этой каши эти понятия часто смешиваются, хотя, о чём именно говорят, часто и так понятно из контекста, надо просто иметь в виду, что это разные вещи.

При этом в С++ ни операторы, ни операции не являются ни функциями, ни методами. Сделать что-то вроде foo.operator+(bar) можно только для своего типа, но для встроенных типов, например, int такое не пройдёт.


¹ Стандарт С++ вообще не утруждает себя текстовыми определениями, а просто ограничивается заданием грамматики: stmt.stmt
² Спасибо @Mikhailo за уточнение

→ Ссылка