Текущий архив: 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