Spec-Zone.ru › Ada 2022
Справочник Ada (Ada 2022)

4.7 Квалифицированные выражения

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

Синтаксис

qualified_expression ::=
subtype_mark'(expression) | subtype_mark'aggregate

Правила разрешения имен

Ожидаемый тип для операнда (выражение или агрегат) определяется subtype_mark. Кроме того, операнд должен разрешаться либо до указанного ожидаемого типа, либо до универсального типа, который его охватывает.

Статическая семантика

Если операнд выражения qualified_expression обозначает объект, то qualified_expression обозначает константный вид этого объекта. Номинальный подтип qualified_expression — это подтип, обозначаемый subtype_mark.

Динамическая семантика

Вычисление qualified_expression вычисляет операнд (и, если он универсального типа, преобразует его к типу, определяемому subtype_mark) и проверяет, что его значение принадлежит подтипу, обозначаемому subtype_mark. Если эта проверка не пройдена, возникает исключение Constraint_Error. Кроме того, если проверки предикатов включены для подтипа, обозначаемого subtype_mark, выполняется проверка, как определено в 3.2.4, что значение удовлетворяет предикатам подтипа.
ПРИМЕЧАНИЕ. Когда контекст однозначно не определяет ожидаемый тип, можно использовать qualified_expression. В частности, если перегруженное имя или агрегат передается перегруженной подпрограмме, может потребоваться квалификация операнда для разрешения его типа.

Примеры

Примеры разьясняющих выражений с помощью квалификации:
type Mask is (Fix, Dec, Exp, Signif);
type Code is (Fix, Cla, Dec, Tnz, Sub);
Print (Mask'(Dec)); -- Dec принадлежит типу Mask
Print (Code'(Dec)); -- Dec принадлежит типу Code
for J in Code'(Fix) .. Code'(Dec) loop ... -- квалификация необходима для Fix или Dec
for J in Code range Fix .. Dec loop ... -- квалификация не нужна
for J in Code'(Fix) .. Dec loop ... -- квалификация не нужна для Dec
Dozen'(1 | 3 | 5 | 7 => 2, others => 0) -- см. 4.6


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API