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

13.9 Непроверенные преобразования типов

Непроверенное преобразование типов может быть выполнено с помощью вызова экземпляра обобщенной функции Unchecked_Conversion.

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

Существует следующая определенная языком обобщенная библиотечная функция:
generic
type Источник(<>) is limited private;
type Цель(<>) is limited private;
function Ada.Unchecked_Conversion(S : Источник) return Цель;
pragma Convention(Intrinsic, Ada.Unchecked_Conversion);
pragma Pure(Ada.Unchecked_Conversion);

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

Размер формального параметра S в экземпляре Unchecked_Conversion соответствует размеру его подтипа. Это фактический подтип, переданный в Источник, за исключением случаев, когда фактический подтип является несвязанным составным подтипом, в этом случае подтип ограничен границами или дискриминантами значения фактического выражения, переданного в S.
Если все перечисленные ниже условия выполняются, эффект непроверенного преобразования заключается в возвращении значения объекта целевого подтипа, представление которого идентично представлению исходного объекта S:
  • S'Size = Target'Size.
  • S'Alignment = Target'Alignment.
  • Целевой подтип не является несвязанным составным подтипом.
  • S и целевой подтип имеют непрерывное представление.
  • Представление S является представлением объекта целевого подтипа.
В противном случае, если тип результата является скалярным, результат функции определяется реализацией и может иметь некорректное представление (см. 13.9.1). Если тип результата нескалярный, эффект определяется реализацией; в частности, результат может быть аномальным (см. 13.9.1).

Разрешения реализации

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

Рекомендации по реализации

Поскольку размер объекта массива обычно не включает его границы, границы не должны быть частью преобразованных данных.
Реализация не должна генерировать ненужные проверки во время выполнения для обеспечения того, что представление S является представлением целевого типа. Она должна использовать разрешение возвращать по ссылке, когда это возможно. Ограничения на непроверенные преобразования следует избегать, если это не требуется целевой средой.
Рекомендуемый уровень поддержки непроверенных преобразований:
  • Непроверенные преобразования должны поддерживаться и быть обратимыми в тех случаях, когда этот пункт определяет результат. Для обеспечения осмысленного использования непроверенного преобразования должно использоваться непрерывное представление для элементарных подтипов, для статически ограниченных подтипов массивов, компонентный подтип которых является одним из подтипов, описанных в этом абзаце, и для подтипов записей без дискриминантов, компонентные подтипы которых описаны в этом абзаце.


Spec-Zone.ru

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