Определения функций в C++
Определение функции отличается от ее объявления тем, что оно содержит тело функции — код, составляющий функцию. Определение функции имеет следующий вид:
decl-specifiers declarator [cv-qualifers] [exception-specification]
{
// function body
}
decl-specifiers declarator [cv-qualifers] =default;
decl-specifiers declarator [cv-qualifers] =delete;
Ниже перечислены компоненты определения.
Спецификаторы объявления, рассмотренные в разделе Объявления функций.
Декларатор (описан ниже в данной статье).
Необязательный квалификатор const или volatile. В этом контексте const может использоваться только для членов класса, чтобы указать функции не изменять данные-члены класса.
Спецификация исключений, описывающая, какие исключения может создавать функция. См. раздел Спецификации исключений.
Тело функции, состоящее из операторов, заключенных в фигурные скобки {}.
=default; в случае явно заданного по умолчанию определения.
=delete; в случае удаленного определения.
Ниже описана форма декларатора.
Необязательные операторы указателя или ссылочные операторы, изменяющие тип возвращаемого значения.
Необязательный модификатор, используемый в системах Microsoft. См. раздел Модификаторы, используемые в системах Microsoft.
Имя функции. Если функция является членом класса или структуры, ее имя может быть уточнено с помощью оператора разрешения области действия.
Список объявлений аргументов, заключенный в скобки ().
Для конструкторов — необязательный инициализатор конструктора (описываемый далее в этой статье).
Сведения о форме декларатора в указанных случаях см. в комментариях по функциям, возвращающим указатели функций, в разделе Объявления функций.
Формальные аргументы, объявленные в списке объявления аргументов, находятся в области тела функции.
На следующем рисунке показаны компоненты определения функции. Затененная область является телом функции.
Компоненты определения функции
Содержащийся в синтаксисе элемент инициализатора конструктора используется только в конструкторах. Его назначение — разрешить инициализацию базовых классов и содержащихся в них объектов. Дополнительные сведения об использовании инициализатора конструктора см. в разделе Инициализация баз и членов.
Явно заданное по умолчанию определение может быть объявлено только для специальной функции-члена. Если специальная функция-член является явно заданной по умолчанию, реализация определяет ее, как если бы она имела неявное определение. Единственное отличие заключается в том, что такая функция может быть невстроенной (неявно объявленная специальная функция-член всегда является встроенной). Дополнительные сведения о заданных по умолчанию функциях см. в подразделе "Установленные по умолчанию и удаленные функции" раздела Поддержка функций C++11 (современный C++).
Удаленное определение, также называемое удаленной функцией, является неявно встроенным. Программа, явно или неявно ссылающаяся на удаленную функцию с целью, отличной от ее объявления, создана неправильно. Дополнительные сведения об удаленных функциях см. в подразделе "Установленные по умолчанию и удаленные функции" раздела Поддержка функций C++11 (современный C++).
См. также
Ссылки
Основные понятия
Поиск имен функций с зависимостью от аргументов (поиск Koenig)