在转换类型时使用的Chr和Char之间的区别在于一个是函数而另一个是强制转换
所以: Char(66) = Chr(66)
我不认为有任何性能差异(至少我从来没有注意到任何,可能会调用另一个)....我很确定有人会纠正我这个!
编辑感谢Ulrich的测试证明它们实际上是相同的.
编辑2任何人都可以想到它们可能不相同的情况,例如,由于上下文,你被推向使用一个而不是另一个?
你在代码中使用了哪些?为什么?
我在D2007做了一个小测试:
program CharChr;
{$APPTYPE CONSOLE}
uses
Windows;
function GetSomeByte: Byte;
begin
Result := Random(26) + 65;
end;
procedure DoTests;
var
b: Byte;
c: Char;
begin
b := GetSomeByte;
IsCharAlpha(Chr(b));
b := GetSomeByte;
IsCharAlpha(Char(b));
b := GetSomeByte;
c := Chr(b);
b := GetSomeByte;
c := Char(b);
end;
begin
Randomize;
DoTests;
end.
Run Code Online (Sandbox Code Playgroud)
两个调用都生成相同的汇编代码:
CharChr.dpr.19: IsCharAlpha(Chr(b));
00403AE0 8A45FF mov al,[ebp-$01]
00403AE3 50 push eax
00403AE4 E86FFFFFFF call IsCharAlpha
CharChr.dpr.21: IsCharAlpha(Char(b));
00403AF1 8A45FF mov al,[ebp-$01]
00403AF4 50 push eax
00403AF5 E85EFFFFFF call IsCharAlpha
CharChr.dpr.24: c := Chr(b);
00403B02 8A45FF mov al,[ebp-$01]
00403B05 8845FE mov [ebp-$02],al
CharChr.dpr.26: c := Char(b);
00403B10 8A45FF mov al,[ebp-$01]
00403B13 8845FE mov [ebp-$02],al
Run Code Online (Sandbox Code Playgroud)
编辑:修改样本以减轻尼克的担忧.
编辑2:尼克的愿望是我的命令.;-)
| 归档时间: |
|
| 查看次数: |
8128 次 |
| 最近记录: |