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

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

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

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

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

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

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

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

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

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

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


Spec-Zone.ru

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