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之前

原文地址:https://www.cnblogs.com/wuxi15/p/14186711.html