понести обращение. Он должен выполнить преобразование, потому что полезная нагрузка RawByteString состоит из 8-битных символов, а строка (UnicodeString) имеет полезную нагрузку из 16-битных символов.
я был похожий вопрос к этому здесь:Delphi XE - я должен использовать String или AnsiString? , Решив, что в моей (большой) библиотеке можно использовать строки ANSI, я понял, что на самом деле могу использовать RawByteString вместо ANSI. Поскольку я смешиваю строки UNICODE со строками ANSI, мой код теперь имеет довольно мало мест, где он выполняет преобразования между ними. Тем не менее, похоже, что если я использую RawByteString, я избавлюсь от этих преобразований.
Пожалуйста, дайте мне знать ваше мнение об этом.
Благодарю.
Обновить:
Это кажется разочаровывающим. Похоже, что компилятор все еще выполняет преобразование из RawByteString в строку.
procedure TForm1.FormCreate(Sender: TObject);
var x1, x2: RawByteString;
s: string;
begin
x1:= 'a';
x2:= 'b';
x1:= x1+ x2;
s:= x1; { <------- Implicit string cast from 'RawByteString' to 'string' }
end;
Я думаю, что он выполняет некоторые внутренние операции (например, копирование данных), и мой код не будет намного быстрее, и мне все равно придется добавить много типов в мой код, чтобы заставить компилятор замолчать.