8. Совместимость
типов
Необходимым
условием корректного вычисления выражений или
выполнения операторов присваивания является
совместимость типов входящих в них компонент.
Суть совместимости типов удобнее
пояснить на примере простейших выражений,
которые состоят из одного (для одноместных
операций) или двух (для двухместных операций)
компонент (операндов) и одной операции.
8.1.
Совместимость по вычислению
Вычисление
выражений возможно только при соблюдении
следующих условий.
- Типы операций и операндов эквивалентны.
Например, нельзя применять
арифметические операции к логическим переменным
и, наоборот, логические операции – к
арифметическим переменным :
Type
R1, R2 : Real;
L1, L2 : Integer;
B1, B2: boolean;
...
Not (R1 + R2) B1 + B2 'Иванов'
+ ' ' + 'Петр' {недопустимые выражения}
Типы операндов эквивалентны.
Типы операндов целые или вещественные, например:
R1 + R2 L1 + R2 L2 / R1 / L1 {допустимые
выражения}
Один тип является базовым, а
второй – ограниченным типом этого же базового
типа.
Type
L11, L12 : Integer;
K : -199 .. 199;
- Типы являются множествами, причем их базовые
типы совместимы.
Type
L : set of 21 .. 2141;
K : set of -199 .. 199;
- Один тип является строковым, а другой – также
строковым либо символьным.
Type
L : String [34]; Q : String [23]; K: Char;
- Один тип является ссылочным, а
другой – также ссылочным либо безтиповым
указателем.
- Оба типа являются упакованными символьными
массивами с одинаковым числом элементов.
- Один тип является строковым, а другой – также
строковым типом, либо упакованным символьным
массивом, либо символьным типом.
- Один имеет тип Variant, а другой – тип integer, real, string,
character или Boolean.
- Оба типа операндов являются процедурными
типами с одинаковым количеством параметров и
идентичными порядковыми типами этих параметров.
Для функций должны быть идентичны и типы
результата.
8.2. Совместимость
по присваиванию
Оператор
присваивания считается корректным, если тип
переменной, расположенной в его левой части,
совместим с типом выражения, располо-женного в
правой части. Выражение T2 может быть присвоено переменной T1, если будут соблюдены следующие
условия.
- Оба типа
T1 и Т2 идентичны.
Недопустимо присваивание файловых типов или
структур, содержащих файловые типы (о файловых
типах подробнее см. гл. 17).
T1 и Т2 имеют совместимые простые
типы.
T1 и Т2 имеют вещественные типы.
T1 и Т2 имеют целые типы.
T1 и Т2 имеет тип PChar или другой строковый тип, и
выражение представляет строковую константу.
T1 и Т2 имеют строковые типы.
T1 имеет строковый тип, а Т2 –
символ или упакованная строка.
T1 – длинная строка, а Т2 имеет
тип PChar.
T1 и Т2 имеют совместимые типы
упакованных строк.
.T1 и Т2 имеют совместимые
множественные типы.
.T1 и Т2 имеют совместимые Pointer-типы.
.T1 имеет тип PChar или PWideChar, а T2 есть
символьный массив вида array[0 .. n] of Char.
.T1 и T2 имеют совместимые
процедурные типы.
.T1 имеет тип Variant, а T2 – один из типов integer, real, string, character или Boolean.
.T1 имеет тип integer, real, string, character
или Boolean, а Т2 – тип Variant.
|
|