Операторы по сравнению с функциями в C/C++

Кто-то недавно спросил меня различие между оператором стандарта C++ (например, новый, удалите, sizeof), и функция (например, коричневый, свободный, malloc). По "стандарту" я имею в виду обеспеченных по умолчанию пакетом компилятора, и не определяемый пользователем. Ниже были ответы, которые я дал, хотя ни один не казался удовлетворительным.

(1) Для оператора не нужны никакие заголовки, которые будут включены для использования его: Например, у Вас может быть вызов к новому без включения любых заголовков. Однако для функции (говорят свободный ()) действительно нужны включенные заголовки, обязательно.

(2) Оператор определяется как таковой (т.е. как оператор класса) где-нибудь в стандартных заголовках. Функция не.

Действительно ли можно ли критиковать эти ответы и дать ли мне лучшее представление о различии?

11
задан PKG 2 June 2010 в 06:27
поделиться

4 ответа

Операторы - это ключевые слова с фиксированным синтаксисом. Те, которые могут быть перегружены, могут немного отличаться по синтаксису, но это в пределах границ. Оператор new по-прежнему пишется new, даже если он перегружен, и синтаксис его вызова всегда одинаков.

Имена функций - это идентификаторы, которые могут быть почти произвольными. Нет синтаксической причины, по которой вы не могли бы отказаться от malloc() и использовать

bool my_fancy_alloc(void*& memory, unsigned char size, bool zero_it);

вместо нее. (Марк: Однако есть и другие причины. Например, здравомыслие ваших коллег по работе).

12
ответ дан 3 December 2019 в 04:51
поделиться

У операторов есть особый синтаксис, например вы можете использовать new (или + ), не заключая аргументы в скобки после имени оператора.

2
ответ дан 3 December 2019 в 04:51
поделиться

(1) не совсем верно. typeid - это оператор, но его использование требует, чтобы вы включили .

Мой ответ был бы прост: операторы определяются как. ::, например, не обязательно должен считаться оператором, но стандарт говорит, что это так, и так оно и есть.

Если вы ищете более многословный ответ, я бы продолжил, упомянув, что операторы в основном не выглядят как функции. А те, что выглядят [sizeof и typeid], не действуют как функции; их операнды не оцениваются во время выполнения.

4
ответ дан 3 December 2019 в 04:51
поделиться

, насколько я понимаю, имя функции является представлением оператора goto, после перехода к конкретному местоположению кода приложение может выполнять от одной до многих единиц работы, с другой стороны, оператор выполняет фактическую единицу работы Работа.

0
ответ дан 3 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: