2009-08-26 3 views

답변

5

삭제는 "컴파일러 마술"기능입니다. 컴파일러는 기본 데이터 형식에 대한 지식을 사용하여 적절하게 작업을 처리합니다. 대부분의 배열의 경우 코드에서 작성한 정보를 삭제해야하는 실제 오프셋과 바이트 수로 간단히 변환하여 _Delete 어셈블리 루틴으로 전달할 수 있습니다. 알렉산더 (Alexander)가 지적했듯이 WideString의 경우 특별한 _WStrDelete 루틴이 있습니다.

결론 : 배열 또는 문자열을 삭제로 전달하여 컴파일하면 컴파일이 잘됩니다.

+0

하하, 그 대답을 좋아합니다. 특히 델파이는 함수의 오버로드 된 버전이 없을 때마다 String에서 WideString으로 암시 적 변환을 수행합니다 ... –

5

Delete, Insert, Length 등과 같은 내부 RTL 기능은 Ansi와 Wide 문자열 모두에서 작동합니다.

예를 들어, WideString의 Delete 호출은 WStrDelete 호출로 변환됩니다 (System.pas 참조).

+0

확실한가요? 델파이 2006에서 그것은 단지 어셈블러 함수입니다 ... –

+1

예, 저는 그것에 대해 꽤 확신합니다 - 바로 지금 D2006에서 점검했습니다. 문자열 (AnsiString)에 대한 삭제는 LStrDelete 호출로 변환되고 WideString에 대한 삭제는 WStrDelete 호출로 변환됩니다 (CPU보기 참조). – Alex

+0

예, 알았습니다. 그 동안도 그 사실을 알았지 만, 어쨌든 고마워했습니다. –

관련 문제