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

前端之家收集整理的这篇文章主要介绍了Delphi:所有常数都是常数,但有些比其他常量更常数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑:
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;有人不相信他们是const。

解决方法

clHotlight:TColor = $ 00FF9933;不是一个常数,而是一个类型常量(=静态变量),即编译器在存储器中为TColor保留一个槽位,该值将在运行时初始保持$ 00FF9933的值。
因为该值可以稍后更改(可分配Const选项为ON),所以它不是一个常量,编译器不能被clLink = clHotLight所接受;

clHotlight = TColor($ 00FF9933);与clHotlight = $ 00FF9933严格相同;
它是一个真正的常量,编译器将以代码中的值$ 00FF9933替换clHotlight。对于clLink也是如此。

阅读这个SO问题(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
原文链接:https://www.f2er.com/delphi/103503.html

猜你在找的Delphi相关文章