加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

德尔福的Char和Chr

发布时间:2020-12-15 09:37:36 所属栏目:大数据 来源:网络整理
导读:在转换类型时使用的Chr和Char之间的区别在于一个是函数而另一个是强制转换 所以:Char(66)= Chr(66) 我不认为有任何性能差异(至少我从来没有注意到任何,可能会调用另一个)….我很确定有人会纠正我这个! 编辑感谢Ulrich的测试证明它们实际上是相同的. 编辑2
在转换类型时使用的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.

两个调用都生成相同的汇编代码:

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:尼克的愿望是我的命令.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读