Объявления
Объявления вводят в программу новые имена. В этом разделе рассматриваются следующие варианты использования объявлений.
Указание класса-хранения, типа и компоновки для объекта или функции.
Объявление функции с ключевыми словами inline (подставляемая) или virtual (виртуальная).
Квалификация декларатора при помощи ключевых слов const (константный) или volatile (непостоянный).
Связывание имени с константой (объявление перечисления).
Объявление нового типа: объявление class (класса), struct (структуры) или union (объединения).
Указание синонима для типа: объявление typedef (определение типа).
Указание пространства имен.
Объявления типа для использования в качестве синонима при помощи псевдонима.
Объявления позволяет не только вводить новое имя, но и указывать, каким образом компилятор будет интерпретировать идентификатор. Объявления не выполняют автоматическое резервирование области хранения, связанной с идентификатором. Область хранения резервируется определениями.
Примечание
Большинство объявлений одновременно являются определениями.К объявлениям, которые не являются определения, относятся объявление класса без списка членов, а также объявление функции без тела функции.
Объявление может представлять собой один из нижеследующих объектов.
[ decl-specifiers ] [ declarator-list ] ;
определение-функции
linkage-specification
template-specification
alias templates
explicit-template-instantiation
explicit-template-specialization
namespace-definition
namespace-alias-definition
alias-declaration
using-declaration
using-directive
asm-definition
Компонент decl-specifiers показан как необязательный; однако он может опускаться только в объявлениях перечислений и типов классов.
Деклараторы в компоненте declarator-list содержат объявляемые имена. Хотя компонент declarator-list указан как необязательный, его можно опускать только в объявлениях или определениях функций.
Примечание
Объявление функции часто называется прототипом.В прототипе функции содержится информация об аргументах и возвращаемом типе функции.Кроме того, прототип позволяет компилятору корректно выполнять преобразования и помогает обеспечить типобезопасность.
Имя считается объявленным сразу после его декларатора, но перед его (необязательным) инициализатором. Дополнительные сведения см. в разделе Точка объявления.
Объявления находятся в области видимости. Область видимости определяет видимость объявленных имен, а также срок жизни определенного объекта (при наличии). Дополнительные сведения о том, как правила области видимости взаимодействуют с объявлениями, см. в разделе Область.
Объявление объекта одновременно является определением, кроме случаев, когда в нем содержится спецификатор класса хранения extern, описанный в разделе Спецификаторы классов хранения. Объявление функции одновременно является определением, если оно не является прототипом. Прототип — это заголовок функции без определения тела функции. Определение объекта выполняет выделение области хранения и соответствующие инициализации этого объекта.
Связанные разделы
Сведения о компоненте function-definition см. в разделе Определения функций в C++.
Сведения о компоненте linkage-specification см. в разделе Спецификации компоновки.
Сведения о компонентах template-specification, explicit-template-instantiation и explicit-template-specialization см. в разделе Шаблоны.
Сведения о компонентах namespace-definition и namespace-alias-definition см. в разделе Пространства имен (C++).
Сведения о компоненте asm-definition см. в разделе __asm.