Определения функций в 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)