Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по С++.doc
Скачиваний:
49
Добавлен:
02.05.2014
Размер:
995.33 Кб
Скачать

R.7.1.4 Спецификация шаблона типа

Спецификация шаблона типа используется для задания семейства типов или функций (см. $$R.14).

R.7.1.5 Спецификация friend

Спецификация friend используется для задания доступа к членам класса (см. $$R.11.4).

R.7.1.6 Спецификация типа

К спецификации типа относятся: спецификация-типа: имя-простого-типа спецификация-класса спецификация-перечисления спецификация-сложного-типа :: имя-класса const volatile При описании объекта служебные слова const и volatile можно добавить к любой законной спецификации-типа. Во всех других случаях в описании может присутствовать не более одной спецификации-типа. Объект со спецификацией const можно инициализировать, но его значение не должно изменяться в дальнейшем. Объект со спецификацией const, если только он не был явно описан как extern, не подлежит внешнему связыванию и должен инициализироваться ($$R.8.4, $$R.12.1). Целое со спецификацией const, инициализированное выражением-константой, может использоваться в выражении-константе ($$R.5.19). Каждый элемент массива со спецификацией const имеет ту же спецификацию, а каждый нестатический член, не являющийся функцией, из объекта класса со спецификацией const сам считается const ($$R.9.3.1). Объект типа без конструктора или деструктора, который имеет спецификацию const, может быть помещен в память, доступную только по чтению. Попытка записи в любую часть такого объекта или приведет к особой адресной ситуации, или пройдет бесследно, как если бы объект не имел спецификации const. Не существует не зависящего от реализации объяснения объектов со спецификацией volatile. Она служит подсказкой транслятору избегать слишком активной оптимизации, связанной с этим объектом, поскольку значение объекта может изменяться способами, скрытыми от транслятора. Каждый элемент массива со спецификацией volatile имеет ту же спецификацию и каждый нестатический член, не являющийся функцией, из объекта класса со спецификацией volatile сам считается volatile ($$R.9.3.1). Если спецификация-типа отсутствует в описании, она считается заданной как int. имя-простого-типа: полное-имя-класса уточненное-имя-типа char short int long signed unsigned float double void Вместе с int нельзя задавать более одного служебного слова long или short. Они могут использоваться и поодиночке, тогда считается, что тип есть int. Служебное слово long может появиться вместе с double. Вместе с char, short, int или long нельзя задавать более одного служебного слова signed или unsigned. Они могут использоваться и поодиночке, тогда считается, что тип есть int. Спецификация signed указывает, что объекты типа char и битовые поля являются знаковыми, для других целочисленных типов эта спецификация избыточна. Конструкции спецификация-класса и спецификация-перечисления определяются в $$R.9 и $$R.7.2 соответственно. спецификация-сложного-типа: служебное-слово-класса имя-класса служебное-слово-класса идентификатор служебное-слово-класса: class struct union Если задан идентификатор, спецификация-сложного-типа описывает его как имя-класса (см. $$R.9.1). Если определено имя, которое описывается с помощью спецификации union, то оно должно быть определено как объединение. Если определено имя, которое описывается с помощью спецификации class, то оно должно быть определено с помощью спецификаций class или struct. Если определено имя, которое описывается с помощью спецификации struct, оно должно быть определено с помощью спецификации class или struct. Имена вложенных типов ($$R.9.7) должны уточняться именем объемлющего класса: уточненное-имя-типа: имя-typedef имя-класса :: уточненное-имя-типа полное-имя-класса: уточненное-имя-класса :: уточненное-имя-класса уточненное-имя-класса: имя-класса имя-класса :: уточненное-имя-класса Имя, уточненное именем-класса должно быть типом, определенным в этом классе или в базовом классе этого класса. Как обычно, имя, описанное в производном классе, делает невидимыми члены с этим именем из базовых классов (см. $$R.3.2).