Справочное руководство по языку Ада-83


Преобразование типа - часть 3


преобразуемым

универсальным операндом. Неявное преобразование преобразуемого универсального операнда применимо тогда и только тогда, когда самый сложный полный контекст (см. 8.7) определяет единственный (числовой) целевой тип для этого неявного преобразования и, кроме этого преобразования, не существует иной, предписанной языком правильной интерпретации этого контекста.

Примечание.

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

Для индексируемых типов в языке допускается неявное преобразование подтипов (см. 5.2.1). Последствием явного преобразования типа может быть изменение представления (в частности, см. 13.6). Явные преобразования используются также для фактических параметров (см. 6.4).

Примеры преобразования числовых типов:

RЕАL(2 * J) -- значение преобразуется к плавающему типу INТЕGЕR(1.6) -- значение равно 2 INТЕGЕR(-0.4) -- значение равно 0

Примеры преобразования производных типов:

type A_FORM is new BFORM;

X : AFORM; Y : BPORM;

X := A_FORM(Y); Y := B_FORM(X); -- обратное преобразование

Примеры преобразования индексируемых типов:

type SEQUENCE is array (INTEGER range <>) of INTEGER: subtype DOZEN is SEQUENCE(1 .. 12); LEDGER : array(1 .. 100) of INTEGER;

SEQUENCE(LEDGER) -- с границами как у LEDGER SEQUENCE(LEDGER(31 .. 42)) -- с границами 31&#x2014;42 DOZEN(LEDGER(31 .. 42)) -- с границами как у DOZEN

Примеры неявных преобразований:

Х : INTEGER := 2; X + 1 + 2 -- неявное преобразование каждого целого литерала 1 + 2 + X -- неявное преобразование каждого целого литерала X + (1 + 2) -- неявное преобразование каждого целого литерала

2 = (1 + 1) -- тип - универсальный-целый

-- неявных преобразований нет A'LENGTH = B'LENGTH -- то же, что и выше С : constant := 3 + 2 -- то же, что и выше X = 3 and 1 = 2 -- неявное преобразование 3, но не 1 и 2




Начало  Назад  Вперед