Вверх ↑
Ответов: 4628
Рейтинг: 749
#1: 2015-09-24 16:58:49 ЛС | профиль | цитата
Во-первых, в коде можно делать всё, что позволяет язык и компилятор, с учетом критериев читабельности, производительности, портабельности и т.п.
Во-вторых, оператор Delete не изменяет строку в том контексте, который тут обсуждается, иначе бы этот код не работал:

#pas
var
S: string;
begin
S := '123456789';
Delete(S, 1, 1);
_debug(S);
end;
Грубо говоря:

#pas
var
S1, S2: string;
begin
S1 := '123456789';
S2 := S1;
// Здесь S2 = S1, точнее, строки не только равны побуквенно, а это одна и та же строка
Delete(S2, 1, 1);
// Здесь S2 <> S1, что значит, что в S2 произошло копирование строки S1 и затем в S2 была присвоена обработанная строка
end;
карма: 26

0