Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 37 38 39 [ 40 ] 41 42 43 ... 210


Описатели

Список описателей, появляющийся в описании, есть разделенная запятыми последовательность описателей, каждый из которых может иметь инициализатор.

список описателей: иниц описатель

иниц описатель , список описателей Где иниц описатель:

описатель инициализатор opt

Спецификатор в описании указывает тип и класс памяти объектов, к которым относятся описатели.

Описатели имеют синтаксис:

описатель: оп имя

( описатель )

* const opt описатель

& const opt описатель

описатель

( список описаний параметров ) описатель

[ константное выражение opt ] Где оп-имя:

простое оп имя

typedef-имя :: простое оп имя А простое оп имя - это:

идентификатор

typedef-имя

~ typedef-имя

имя функции операции

имя функции преобразования

Группировка та же, что и в выражениях.

Смысл описателей

Каждый описатель считается утверждением того, что если в выражении возникает конструкция, имеющая ту же форму, что и описатель, то она дает объект указанного типа и класса памяти. Каждый описатель содержит ровно одно оп имя; оно определяет описываемый идентификатор. За исключением описаний



некоторых специальных функций, оп имя будет простым идентификатором.

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

Теперь представим себе описание:

T D1

где T - спецификатор типа (как int и т.д.), а D1 - описатель. Допустим, что это описание заставляет идентификатор иметь тип ... Т , где ... пусто, если идентификатор D1 есть просто обтчный идентификатор (так что тип x в int x есть просто int). Тогда, если D1 имеет вид *D

то тип содержащегося идентификатора есть ... указатель на Т Если D1 имеет вид

* const D

то тип содержащегося идентификатора есть ... константный указатель на Т , то есть, того же типа, что и *D, но не lvalue.

Если D1 имеет вид

&D

& const D

то тип содержащегося идентификатора есть ... ссылка на Т . Поскольку сс1ка по определению не может быть lvalue, использование const излишне. Невозможно иметь ссылку на void

(void&).

Если D1 имеет вид

D (список описаний параметров) то содержащийся идентификатор имеет тип ... функция, принимающая параметр типа список описаний параметров и возвращающая Т .

список описаний параметров:

список описаний парам opt ... opt

список описаний парам:

список описаний парам , описание параметра



описание параметра

описание параметра:

спецификаторы описания описатель

спецификаторы описания

описатель = выражение

спецификаторы описания абстракт описатель

спецификаторы описания абстракт описатель = выражение

Если список описаний параметров заканчивается многоточием, то о числе параметров известно лишь, что оно равно или больше числа специфицированных типов параметров; если он пуст, то функция не получает ни одного параметра.

Все описания для функции должны согласовываться и в типе возвращаемого значения, а также в числе и типе параметров.

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

Параметры по умолчанию будут использоваться в вызовах, где опущены стоящие в хвосте параметры. Параметр по умолчанию не может переопределяться более поздними описаниями. Однако, описание может добавлять параметры по умолчанию, не заданные в предыдущих описаниях.

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

Если D1 имеет вид:

0[константное выражение]

то тип содержащегося идентификатора есть ... массив объектов типа Т . В первом случае константное выражение есть выражение, значение которого может быть определено во время компиляции, и тип которого int.

Если подряд идут несколько спецификаций массив из , то создается многомерный массив; константное выражение,



1 ... 37 38 39 [ 40 ] 41 42 43 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика