2

很久以前,我记得我可以在 Turbo Pascal 7 中做到这一点。

也许我错了,这是我需要澄清的事情,但是可以将字符串数组声明为常量吗?

如果不是什么是选项/解决方法。

我现在拥有的是:

type
  TStates = (sOne, sTwo, sThree);
var
  TArrayOfString: array [sOne..sThree] of string = 
     ('State one', 'State two', 'State three');

但想用 const 替换那个 var。

谢谢

编辑 1:添加了更多代码来澄清我的问题。

4

2 回答 2

12

只需将var替换为const是完全合法的:

const
  TArrayOfString: array [1..3] of string =
     ('String one', 'String two', 'String three');

我很好奇为什么您的标识符名称以T开头。您是否尝试定义这样的类型:

type
  TArrayOfString = array [1..3] of string;
const
  MyArrayOfString: TArrayOfString =
     ('String one', 'String two', 'String three');

您不能将可变长度数组 (AFAIK) 作为 const,也不能将其设为未定义类型。

这是使用 Delphi 2009。使用 FreePascal 的 YMMV。

于 2009-04-14T21:20:21.487 回答
4

在过去的 pascal/delphi 中,当您写道:

const 
  A : Integer = 5;

您没有定义一个常量,而是一个初始化的变量。

您可以毫无问题地定义:

const
  A : array [1..2] of string = ('a', 'b');

但是字符串也必须是常量。他们需要在编译时知道。

这同样适用于:

var
  A : array [1..2] of string = ('a', 'b');

所以你不能写:

var
  B : string = 'hi';
  A : array [1..2] of string = (B, 'b');

因为 B 是一个 var。但是你可以写:

const
  B = 'hi'; // Even a typed constant does not work.

var
  A : array [1..2] of string = (B, 'b');

请注意,提供了选项:“可分配的类型常量”(默认为 false)来创建可以分配的旧时类型的常量。它只是为了向后兼容,因为你真的希望你的常量保持不变。

于 2009-04-14T20:51:39.777 回答