gpt4 book ai didi

Delphi:所有常数都是常数,但有些常数比其他常数更常数?

转载 作者:行者123 更新时间:2023-12-03 14:34:09 32 4
gpt4 key购买 nike

考虑:

const 
clHotlight: TColor = $00FF9933;
clLink = clHotLight; //alias of clHotlight

[Error] file.pas: Constant expression expected

以及有效的替代措辞:

const 
clHotlight = TColor($00FF9933);
clLink = clHotLight; //alias of clHotlight

解释一下。

<小时/>

然后考虑:

const 
AdministratorGUID: TGUID = '{DE44EEA0-6712-11D4-ADD4-0006295717DA}';
SuperuserGUID = AdministratorGUID; //alias of AdministratorGUID

[Error] file.pas: Constant expression expected

并修复。

编辑:在声明之前添加关键字const;有人不相信他们是常量。

最佳答案

clHotlight: TColor = $00FF9933; 不是常量,而是类型常量(=静态变量),即编译器在内存中为 TColor 保留一个槽,该槽将保存值 $00FF9933 最初在运行时。
由于该值稍后可以更改(使用“Assignable Const”选项打开),因此它不是真正的常量,并且不能被 clLink = clHotLight; 中的编译器接受。

clHotlight = TColor($00FF9933);clHotlight = $00FF9933;
严格相同它是一个真正的常量,编译器将用其值 $00FF9933 替换它出现在代码中的任何位置。对于 clLink 也是如此。

阅读这个问题( In Delphi 7, why can I assign a value to a const? )以及那里所有好的答案......

编辑:关于 TGUID...
问题在于编写 AdministratorGUID: TGUID = '{DE44EEA0-6712-11D4-ADD4-0006295717DA}'; 是不正确的。
它使用一些编译器魔法在后台调用StringToGUID,从而可以方便地将GUID表示为字符串,而它们本质上不是字符串。它们是记录。

因此,尝试 AdministratorGUID = '{DE44EEA0-6712-11D4-ADD4-0006295717DA}'; 将不起作用。那不是 GUID...

解决方法是使用绝对类型常量变量指向同一内存区域指令:

const
AdministratorGUID: TGUID = '{DE44EEA0-6712-11D4-ADD4-0006295717DA}';
var
SuperuserGUID: TGUID absolute AdministratorGUID; //alias of AdministratorGUID
RootGUID: TGUID absolute AdministratorGUID; //alias of AdministratorGUID

关于Delphi:所有常数都是常数,但有些常数比其他常数更常数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714365/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com