德尔福的Char和Chr
发布时间:2020-12-15 09:37:36 所属栏目:大数据 来源:网络整理
导读:在转换类型时使用的Chr和Char之间的区别在于一个是函数而另一个是强制转换 所以:Char(66)= Chr(66) 我不认为有任何性能差异(至少我从来没有注意到任何,可能会调用另一个)….我很确定有人会纠正我这个! 编辑感谢Ulrich的测试证明它们实际上是相同的. 编辑2
在转换类型时使用的Chr和Char之间的区别在于一个是函数而另一个是强制转换
所以:Char(66)= Chr(66) 我不认为有任何性能差异(至少我从来没有注意到任何,可能会调用另一个)….我很确定有人会纠正我这个! 编辑感谢Ulrich的测试证明它们实际上是相同的. 你在代码中使用了哪些?为什么? 解决方法
我在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. 两个调用都生成相同的汇编代码: 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 编辑:修改样本以减轻尼克的担忧. 编辑2:尼克的愿望是我的命令. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |