Справочник по Ada 95
4.5.3 Бинарные операторы сложения
Статические семантики
Бинарные операторы сложения + (сложение) и - (вычитание) определены для каждого числового типа T с их обычным значением. У них следующие спецификации:
function "+"(Left, Right : T) return T
function "-"(Left, Right : T) return T
function "-"(Left, Right : T) return T
Операторы конкатенации & определены для каждого одномерного массива типа T без ограничений с типом компонента C. У них следующие спецификации:
function "&"(Left : T; Right : T) return T
function "&"(Left : T; Right : C) return T
function "&"(Left : C; Right : T) return T
function "&"(Left : C; Right : C) return T
function "&"(Left : T; Right : C) return T
function "&"(Left : C; Right : T) return T
function "&"(Left : C; Right : C) return T
Динамические семантики
При вычислении конкатенации с типом результата T, если оба операнда имеют тип T, результат конкатенации — одномерный массив, длина которого равна сумме длин операндов, а компоненты включают компоненты левого операнда, за которыми следуют компоненты правого операнда. Если левый операнд — нулевой массив, результат конкатенации — правый операнд. В противном случае нижняя граница результата определяется следующим образом:
- Если конечный предок типа массива был определен с помощью constrained_array_definition, то нижняя граница результата — нижняя граница типа индекса;
- Если конечный предок типа массива был определен с помощью unconstrained_array_definition, то нижняя граница результата — нижняя граница левого операнда.
Верхняя граница определяется нижней границей и длиной. Проверяется, что верхняя граница результата конкатенации принадлежит диапазону типа индекса, за исключением случая, когда результат — нулевой массив. В случае несоответствия генерируется исключение Constraint_Error.
Если один из операндов имеет тип компонента C, результат конкатенации определяется приведенными выше правилами, используя вместо такого операнда массив, содержащий этот операнд в качестве единственного компонента (преобразованного к типу компонента) и имеющий нижнюю границу типа индекса массива.
Результат конкатенации определён в терминах присваивания анонимному объекту, как и для любого вызова функции (см. 6.5).
ПРИМЕЧАНИЯ
15 Как и для всех предопределённых операторов над модульными типами, бинарные операторы сложения + и - над модульными типами включают конечное приведение по модулю модуля, если результат выходит за пределы базового диапазона типа.
Примеры
Примеры выражений, использующих бинарные операторы сложения:
Z + 0.1 -- Z должен быть вещественного типа
"A" & "BCD" -- конкатенация двух строковых литералов
'A' & "BCD" -- конкатенация символьного литерала и строкового литерала
'A' & 'A' -- конкатенация двух символьных литералов
'A' & "BCD" -- конкатенация символьного литерала и строкового литерала
'A' & 'A' -- конкатенация двух символьных литералов