Совместимость

Эквивалентность

Эквивалентность - это наиболее высокий уровень соответствия типов. Она требуется при действиях с указателями (см. лекцию 10), а также при вызовах подпрограмм. "А как же тогда быть с оговоркой, сделанной двумя абзацами выше?" - спросите вы. Мы не станем сейчас описывать механизм передачи аргументов процедурам и функциям, поясним лишь, что эквивалентность типов требуется только для параметров-переменных (см. лекцию 8).

Итак, два типа - Т1 и Т2 - будут эквивалентными, если верен хотя бы один вариант из перечисленных ниже:

  • Т1 и Т2 совпадают;
  • Т1 и Т2 определены в одном объявлении типа;
  • Т1 эквивалентен некоторому типу Т3, который эквивалентен типу Т2.

Поясним это на примере:

type T2 = T1; T3 = T1; T4,T5 = T2;

Здесь эквивалентными будут Т1 и Т2; Т1 и Т3; Т1 и Т4; Т1 и Т5; Т4 и Т5. А вот Т2 и Т3 - не эквивалентны!

Совместимость типов требуется при конструировании выражений, а также при вызовах подпрограмм (для параметров-значений). Совместимость означает, что для переменных этих типов возможна операция присваивания - хотя во время этой операции присваиваемое значение может измениться: произойдет неявное приведение типов данных (см. п. "Приведение типов данных" ниже).

Два типа Т1 и Т2 будут совместимыми, если верен хотя бы один вариант из перечисленных ниже:

  • Т1 и Т2 эквивалентны (в том числе совпадают);
  • Т1 и Т2 - оба целочисленные или оба вещественные;
  • Т1 и Т2 являются подмножествами одного типа;
  • Т1 является некоторым подмножеством Т2;
  • Т1 - строка, а Т2 - символ (см. лекцию 5);
  • Т1 - это тип pointer, а Т2 - типизированный указатель (см. лекцию 10);
  • Т1 и Т2 - оба процедурные, с одинаковым количеством попарно эквивалентных параметров, а для функций - с эквивалентными типами результатов (см. лекцию 8).