понести обращение. Он должен выполнить преобразование, потому что полезная нагрузка 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;

Я думаю, что он выполняет некоторые внутренние операции (например, копирование данных), и мой код не будет намного быстрее, и мне все равно придется добавить много типов в мой код, чтобы заставить компилятор замолчать.

Ответы на вопрос(2)

Ваш ответ на вопрос