Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

А когда смысл const поменялся?   Найти похожие ветки 

 
Григорьев Антон ©   (2004-09-11 08:24) [0]

Помнится, возможность использовать const для параметров процедур появилась впервые в BP7, причём в документации было чётко сказано, что в этом случае в стек, как и при использовании var, помещается указатель, а не значение, но компилятор не даёт использовать этот указатель для изменения значения. До сегодняшнего дня я был уверен, что в Delphi всё то же самое. Но возникли некоторые сомнения, я сделал пару экспериментов и убедился, что в Delphi 5 константные параметры передаются по значению, а не по ссылке. Кто-нибудь знает, с каких версий Delphi это началось?


 
Verg ©   (2004-09-11 09:51) [1]

SomeProc(const a : integer)
a - передается по значению. Даже в BP


 
GuAV ©   (2004-09-11 10:38) [2]

На самом деле длиные записи и массивы передаются по ссылке даже без const, а при их модификации уже в самой процедуре создаётся рабочая копия.

const с точки зрения способа передачи параметров ничего не означает, кроме того, что значение не будет изменено внутри процедуры.

Про BP не знаю, но во всех Дельфи это так.


 
DiamondShark ©   (2004-09-11 11:08) [3]


> До сегодняшнего дня я был уверен, что в Delphi всё то же
> самое. Но возникли некоторые сомнения, я сделал пару экспериментов
> и убедился, что в Delphi 5 константные параметры передаются
> по значению, а не по ссылке

Экими тернистыми путями приходится иной раз к истине идти.

Constant parameters are similar to value parameters, except that you can’t assign a value to a constant parameter within the body of a procedure or function, nor can you pass one as a var parameter to another routine.


 
Григорьев Антон ©   (2004-09-13 08:10) [4]

Каюсь, облажался :(

В справке TP7, BP7 и BPW7, которые у меня до сих пор сохранились, я вообще не нашёл упоминания о константных параметрах, зато нашёл у себя ксерокопию старой статьи, которая была посвящена тогда ещё совсем новой 7-ой версии TP, и в ней перечислялись отличия от 6-ой версии. Там были упомянуты константные параметры и написано, что передаются они по ссылке. Сколько лет уж прошло, а я был уверен, что всё так оно и есть :)

А в TP7 я проверил - константный параметр типа LongInt передаётся по значению.


 
PVOzerski ©   (2004-09-13 10:14) [5]

Интересно, что я тоже думал, как Антон. Хотя какой смысл передавать по ссылке меньше 5 байт, если модифицировать их в теле функции нельзя?


 
Суслик ©   (2004-09-13 11:11) [6]

я автоматом всегда пишу const (привычка такая).

я это делаю (ал), преследуюя две цели:
1) нечайно не облажаться и не присвоить значение параметру (я противник такого подхода, для этого есть локальные переменны)
2) дать возможность компилятору оптимизировать то, что он сможет оптимизировать получив от меня уверения, в том, что мне параметр менять не нужно. Возможность такой оптимизации оговорена где-то в справке.

Хотя, понятно, что в большинстве случаев это все ерунда и ничего не дает.


 
DiamondShark ©   (2004-09-13 11:38) [7]

"Духовенство было бы весьма недовольно, если бы его духовный труд оплачивался духовно."
Гольбах


 
DiamondShark ©   (2004-09-13 11:39) [8]

Упс... Промахнулся.


 
Григорьев Антон ©   (2004-09-19 18:57) [9]

Раскопал ещё раз ту статью, посмотрел. Называется она "Borland Pascal 7.0: новые возможности", автор - В.В. Фаронов. Опубликована в журнале Мир ПК №1 за 1993 год, стр. 105-114. Вот точная цитата (на стр. 107): "В новой версии появился ещё один тип параметров - константные. Они передаются по ссылке, но изменение их внутри подпрограммы запрещено синтаксисом языка, что контролируется компилятором".

Из всего этого мораль: даже читая статьи и книги таких авторитетных людей, как Фаронов, следует держать ухо востро :)) Особенно это касается Юрия Зотова, который как раз сейчас пишет рецензию на новую книгу Фаронова :)) Юрий, что там написано про константные параметры?


 
Palladin ©   (2004-09-19 20:47) [10]

Лечась по справочнику, Вы, типа, имеете риск умереть от опечатки :)


 
Суслик ©   (2004-09-20 10:28) [11]


> Из всего этого мораль: даже читая статьи и книги таких авторитетных
> людей, как Фаронов, следует держать ухо востро

Да ладно людей читать...
ухо востро надо держать, когда читаешь даже книги и доки авторитетных корпораций.
MS, например.

Вообще - верить можно только CPU. :)))


 
Григорьев Антон ©   (2004-09-20 10:29) [12]


> Palladin ©   (19.09.04 20:47) [10]
> Лечась по справочнику, Вы, типа, имеете риск умереть от
> опечатки :)

И лечась у врача, тоже :) От опечатки в учебнике, по которому учился врач :)



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1096026274
Tack
2004-09-24 15:44
2004.10.10
Мерцание TRichEdit при скроллинге


14-1095927192
REP
2004-09-23 12:13
2004.10.10
Что такое поддержка MPEG4 в TV тюнерах?


3-1093228943
buka
2004-08-23 06:42
2004.10.10
Роковое число 255!


1-1095758581
Goga
2004-09-21 13:23
2004.10.10
Управление TADODataSet из TThread


4-1094655045
Алексей Петухов
2004-09-08 18:50
2004.10.10
Настройки принтера