Delphi programming blog
Источник: http://teran.karelia.pro/articles/item_4453.html
 

Массив типизированных констант

Опубликовано 14.01.2011 г. 13:17

Вряд ли эта заметка заслуживает внимания, просто мысли вслух. Вроде как достаточно часто мы определяем локальные константы, в частности массивы таких констант. Допустим мы имеем 3 целочисленных константы, и массив констант. В массив мы добавляем эти же 3 константы. т.е следующий фрагмент кода:

const A = 1;
      B = 2;
      C = 3;
      data : array[0..2] of integer = (A,B,C);

Все хорошо, все работает. Однако стоит нам явно указать что константа имеет тип integer:

const A : integer = 1;
      B = 2;
      C = 3;
      data : array[0..2] of integer = (A,B,C);

как мы получаем

[DCC Error] PrognoseKernel.pas(97): E2026 Constant expression expected

в строке определения массива. видимо ошибка компилятора. а хотелось сделать массив TGUID констант (:

Метки:  error 

Комментарии

DelphiGuru
14.01.2011 в 15:50
Когда мы задаём константу таким образом: const A : integer = 1; - она не является на самом деле константой, это инициализированная глобальная переменная, значение которой можно изменять. Нас ещё на первом курсе по Паскалю учили :)
ter
14.01.2011 в 16:05
век живи век учись (:
Typed Constants
Typed constants, unlike true constants, can hold values of array, record, procedural, and pointer types. Typed constants cannot occur in constant expressions.

че то особо типизированными никогда не пользовался, дак и не задумывался о таком.
действительно, можно в коде значение поменять такой константы
program test;
const B : integer = 10;
begin
    integer((@b)^) := 1;
    writeln(b);
end.
bookmist
14.01.2011 в 16:27
Возможно, получится сделать как с константами типа TColor.
const a=TGUID('???');
ter
14.01.2011 в 19:03
ну вот в справке и написано что есть true constants а есть типизированные константы,
первые подставляются на этапе компиляции,
вторые как писалось выше все же являются по большому счету переменными, хотя напрямую их изменить нельзя, просто присвоив значение.
jack128
18.01.2011 в 11:00
А еще есть галка в настройках компилятора, которая превращает типизированные константы в нормальные, которые нельзя изменить в ран-тайм
- Имя
- e-mail*
- Сайт
вы можете использовать теги [i],[b],[code],[quote]
Дополнительно