|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Объявление формальных параметров подпрограмм
Здравствуйте, уважаемый!
Вопрос у меня такой - как объявить параметр подпрограммы, передаваемый по ссылке, чтобы его нельзя было изменять. Т.е. для меня ясно использование (const i: integer) - неизменяемая копия; (var i: integer) - работа с оригиналом через ссылку. И вот мне нужно, чтобы эта работа с оригиналом была только на чтение значения. Благодарю за внимание и возможные советы! |
#2
|
||||
|
||||
ничего не указывать перед именем параметра, т.е.
Код:
procedure SomeProc(SomePar:Integer); |
#3
|
|||
|
|||
Можно использовать const. Несколько соображений.
1)Если передаётся массив, то передача всё-равно пойдёт по ссылке. 2) Если передаётся структурированный объект, то поля можно будет изменять (напр., если Canvas нельзя поменять, то Canvas.Font можно) 3) В Java предусмотрена процедура клонирования, т.е. делается копия объекта и передаётся ссылка на копию, а оригинал никто не поменяет. |
#4
|
|||
|
|||
Вопрос считаю незакрытым
Мой вопрос нужно перефразировать -
как на дельфи записать прототип функции СИ++: "f1(const int *Arr)", т.е. требуется, чтобы в теле процедуры, Arr представлял собой по сути фактический параметр, который подпрограмма не должна изменять. Следующие варианты записи аналогичной подпрограммы на дельфи не подходят, так не удовлетворяют вышеизложенному требованию: f1(var Arr: TArr); - работа с оригиналом, но последний может быть изменен f1(const Arr: TArr) - работа с копией фактического параметра, которую нельзя редактировать; f1(Arr: TArr) - копия фактического параметра, которую можно редактировать. Манипуляции с f1(Arr: array of integer) - дают те же результаты Похоже, что на дельфи повторить описание "сишной" подпрограммы не удастся и нужно просто быть предельно внимательным, хотя это само собой разумеется. Спасибо! |
#5
|
||||
|
||||
А чем не устраивает работа с копией?
|
#6
|
|||
|
|||
Хотя бы тем, что на передачу копии может потребоваться достаточно много времени
|
#7
|
||||
|
||||
Цитата:
Цитата:
Цитата:
Ответ на твой вопрос - f1(const Arr: TArr) |
#8
|
|||
|
|||
Ура! Всем большое спасибо!
Особая благодарность Decoding за окончательное разрешение моего вопроса и работу над ошибками
|