delphi - 为什么默认情况下我的 Delphi 7 中禁用可分配类型常量?

标签 delphi delphi-7

而不是我只能打字

const clicks : Integer = 1;

我必须输入

{$J+}
const clicks : Integer = 1; 
{$J-}

我认为在编译器选项菜单中选中该框要容易得多..但我想确保它不会在长期错误中伤害我..并且想知道为什么它会被禁用(未选中) ?

非常感谢您对此提供的帮助,谢谢大家。

最佳答案

自 Delphi 2 发布以来,默认情况下已禁用它们,IIRC。实际的选项是在 Delphi 1 的对话框中提供的,我似乎记得在下一版本中默认值从启用更改为禁用的大惊小怪。不过已经过去很长一段时间了,所以当默认值被逆转时,我可能会落后一步;可能是D3。可赋值常量是从旧的 Turbo Pascal 时代遗留下来的,并且是缺乏实际静态变量类型的替代品。它们被更好的解决方案所取代,即初始化(全局)变量(请参阅 Declaring Variables )。

如果您确实需要使用可写常量,则应该仅在必要的最小(最有限)范围内这样做,而不是更改全局设置。常量应该尽可能准确(常量)。使用可写常量的典型原因是,当您需要某个范围(例如过程、函数或单元)内的局部变量需要在调用之间保留其值时,通常有更好的方法来做到这一点。一些选项是对象字段(成员变量)或有限范围初始化变量(在受限区域中可见的变量,例如在单元的实现部分中,并初始化为起始值)。

可赋值常量意味着该值可以在运行时更改,并且实际上很少有用。真正的常数就是常数,并且不应该允许改变。

对于类型化常量来说也是如此;应该有实际需要使用它们,除非您存储常量数组、记录、指针或过程类型,否则很少需要使用它们,如这些声明中所示:

const
  TIntLookupArray: array[0..1] of Integer = (1, 2);
  TErrorMsgs: array[0..1] of string = ('Invalid input', 'Invalid sequence');

您首先使用类型化常量有什么原因吗?如果你只使用

就不会出现这个问题
const clicks = 1;

并让编译器决定正确的类型。如果你想确保它的大小是Integer,只需使用像

这样的类型转换
const clicks = Integer(1); 

请参阅Delphi documentation docwiki了解更多信息。

关于delphi - 为什么默认情况下我的 Delphi 7 中禁用可分配类型常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843202/

相关文章:

delphi - 如何以编程方式确定 TMemo 中一行文本的高度?

delphi - Delphi 7 中的 FormShow 问题

delphi - Delphi 可以告诉我引发异常的例程的名称吗?

delphi - 使用 ADO 从另一个表上的查询创建新表

delphi - 如何在 Delphi 2010 中更改 TWICImage 的像素格式

delphi - 将 ssl 处理程序加载到 Indy 中的 Imap 服务器时发生访问冲突

Delphi 7 和 .dfm 文件显示表格吗?

Delphi - 获取给定文件的编码

Delphi:即使设置了 Delimiter,TStringList Delimiter 也始终是空格字符

delphi - 无法在组框上拖放单选按钮