Справочник по Ada 95
6.4.1 Ассоциации параметров
Ассоциация параметров определяет связь между фактическим параметром и формальным параметром.
Правила разрешения имен
Имя formal_parameter_selector_name в parameter_association должно указывать на parameter_specification вызываемого представления.
Фактический параметр — это либо explicit_actual_parameter, указанный в parameter_association для данного формального параметра, либо соответствующее значение default_expression, если для формального параметра нет parameter_association. Ожидаемый тип фактического параметра — это тип соответствующего формального параметра.
Если режим равен in, фактический параметр интерпретируется как выражение; в противном случае фактический параметр интерпретируется как имя, если это возможно.
Правила допустимости
Если режим равен in out или out, фактический параметр должен быть именем, обозначающим переменную.
Тип фактического параметра, связанного с параметром типа access, должен быть совместим (см. 4.6) со своим анонимным типом доступа.
Динамическая семантика
При оценке parameter_association:
- Фактический параметр вычисляется в первую очередь.
- Для параметра типа access, access_definition уточняется, что создает анонимный тип доступа.
- Для параметра (любого режима), передаваемого по ссылке (см. 6.2), выполняется преобразование фактического параметра к номинальному типу формального параметра, и формальный параметр обозначает это преобразование.
- Для параметра in или in out, передаваемого по значению (см. 6.2), создается объект формального параметра, а значение фактического параметра преобразуется к номинальному типу формального параметра и присваивается формальному параметру.
- Для параметра out, передаваемого по значению, создается объект формального параметра и:
- Для типа access, формальный параметр инициализируется значением фактического, без проверки ограничений;
- Для составного типа с дискриминантами или имеющего неявные начальные значения для подкомпонентов (см. 3.3.1), поведение аналогично параметру in out, передаваемому по значению.
- Для любого другого типа, формальный параметр не инициализирован. Если составной, выполняется преобразование фактического параметра к номинальному типу формального (что может вызвать Constraint_Error), и фактический тип формального параметра — это тип преобразования. Если элементарный, фактический тип формального параметра задается его номинальным типом.
Формальный параметр режима in out или out с дискриминантами ограничен, если либо его номинальный тип, либо фактический параметр ограничен.
После нормального завершения и выхода из подпрограммы для каждого параметра in out или out, передаваемого по значению, значение формального параметра преобразуется к типу переменной, заданной в качестве фактического параметра, и присваивается ей. Эти преобразования и присваивания происходят в произвольном порядке.