Delphi 函数传Const 参数的坑

原文见https://blog.marcocantu.com/blog/2020-december-Delphi-const-string-params.html。

大概的意思看以下代码

  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
  private
   s1: string;
    procedure Test(const Value: string);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Test(const Value: string);
begin
//如果是修改Value,IDE自然是不给你修改的。但是S1是全局变量,你可以访问,可以修改
   s1 := '456';

   ShowMessage(Value);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

  s1 := Copy('123', 1);
//这里入,S1就不可以修改了 Test(s1);
end; end.

然后就

参数以Const 传入是有优化作用的,不用可惜了那如何避免。上面的链接了说了解决方案,在修改S1的时候,将传入的Value放入一个变量里就可以了

procedure TForm1.Test(const Value: string);
begin
   var s2:=Value;
   s1 := '456';

   ShowMessage(Value);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

  s1 := Copy('123', 1);
  Test(s1);
end;

end.

这样就可以解决了!!记住一定要在修改s1之前

 

posted @ 2020-12-24 22:28  似水@流年  阅读(308)  评论(0编辑  收藏  举报
悠悠记得当天笑 仿佛入迷 又带一点惘 种种喜悦 令人为你鼓掌 眉飞色舞千千样 你是个妙人 是个少年狂