Можно ли объявить const массива в ОБА Delphi и FreePascal без элементов быть константами? - PullRequest
2 голосов
/ 15 апреля 2009

Давным-давно я помню, что мог сделать это в Turbo Pascal 7.

Может быть, я ошибаюсь, и это то, что мне нужно уточнить, но возможно ли объявить массив строк как константу?

Если нет, то какой вариант / обходной путь.

Что у меня сейчас есть:

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

но хотел бы заменить эту переменную на const.

Спасибо

Редактировать 1 : Добавлен дополнительный код для прояснения моего вопроса.

Ответы [ 2 ]

12 голосов
/ 15 апреля 2009

Просто заменить 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. YMMV с FreePascal.

4 голосов
/ 15 апреля 2009

В старый день паскаль / 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 - это вар. Но вы можете написать:

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

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

Обратите внимание, что опция «Назначаемые типизированные константы» (по умолчанию false) предоставляется для создания констант старого типа, которые можно назначать. Это просто для обратной совместимости, потому что вы действительно хотите, чтобы ваши константы были постоянными.

...