|
Программирование >> Перегруженные имена функций и идентификаторы
Описатели Список описателей, появляющийся в описании, есть разделенная запятыми последовательность описателей, каждый из которых может иметь инициализатор. список описателей: иниц описатель иниц описатель , список описателей Где иниц описатель: описатель инициализатор 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. Если подряд идут несколько спецификаций массив из , то создается многомерный массив; константное выражение,
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |