看来Delphi编译器不符合const记录参数的时候
涉及“记录方法”.
涉及“记录方法”.
以前没有试图滥用常规惯例,我有点惊讶
找到编译器接受的代码如下:
type TTest = record Field : String; procedure Update; end; procedure TTest.Update; begin Field := Field + '+1'; end; procedure DoStuff(const t : TTest); begin ShowMessage(t.Field); t.Update; ShowMessage(t.Field); end;
而如果你试图做一个
t.Field:= ‘DOH’;在DoStuff f.i.中,编译器会正确抱怨,但是您可以调用方法来修改“const”记录,甚至没有提示或警告.所以这是不同于引用类型(如类或动态数组)的行为,其中允许直接字段写入(因为const仅限制对参数本身的更改).
附录:这样可以修改声明的编译时常量,如下所示:
const cTest : TTest = (Field : '1'); ... cTest.Update; // will show '1' then '1'+'1' ShowMessage(cTest.Field); // will show '1' (because optimized at compile-time)
这是被接受/记录的行为吗?还是只是编译器的缺点?