powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / const параметры
25 сообщений из 52, страница 1 из 3
const параметры
    #35529578
smskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не до конца понятен смысл const параметров в delphi.
Ну то что изменять их значение внутри процедуры нельзя - это понятно.
Непонятно передаются ли const параметры по ссылке или по значению?
...
Рейтинг: 0 / 0
const параметры
    #35529588
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это дело компилятора, чаще всего по ссылке.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
const параметры
    #35529606
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smskinНе до конца понятен смысл const параметров в delphi.
Ну то что изменять их значение внутри процедуры нельзя - это понятно.
Непонятно передаются ли const параметры по ссылке или по значению?

А какая разница, каким образом там в кишках это дело устроено? Причем, насколько я понимаю, это дело может меняться при изменении компилятора.
...
Рейтинг: 0 / 0
const параметры
    #35529643
x77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smskinНу то что изменять их значение внутри процедуры нельзя - это понятно.

если передавался объект - его свойства менять можно, всегда.

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

с точки зрения более высокого уровня, т.е. концепций ООП, такие параметры нужны для исключения логических ошибок на этапе написания кода. например, чтобы какой особо одарённый пионер не вздумал менять дескриптор подключения к СУБД или там оконный хэндл.
...
Рейтинг: 0 / 0
const параметры
    #35530064
vunder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело не только в логике программного кода. При всей вашей полемике вы забываете, что передача параметров в подпрограмму возможно ТОЛЬКО 2 способами: по значению и по ссылке. В первом случае значение переменной копируется в стэк и передается через него в подпрограмму. При передачи по указателю в стэк копируется только ссылка на переменную. В Delphi/Pascal для объявления передачи параметров по значеню не надо указывать никаких дополнительный директив. Использование const и var определят рабочу с переменными через указатели. Для программиста это всего лишь будет означать некоторые особенност испольвания таких переменных, а вот для компилятора - совсем другое дело.
P.S. Маленький совет: все переменный, размер которых превышает 4 байта лучше объявлять как const (ну или var , если значение будет меняться). В этом случае, например при передачи строковых параметров, будет расходоваться меньше памяти, т.к. при передачи больших переменных по значению они будут полностью дублироваться.
...
Рейтинг: 0 / 0
const параметры
    #35530073
vunder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, передача объекта всегда производиться по указателю. Единственный нюанс - директива var . Если объект был передан с ее помощью, то изменение параметра внутри подпрограммы изменит и его значение в основном коде.
...
Рейтинг: 0 / 0
const параметры
    #35530326
alex0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vunderКстати, передача объекта всегда производиться по указателю. Единственный нюанс - директива var . Если объект был передан с ее помощью, то изменение параметра внутри подпрограммы изменит и его значение в основном коде.
А если объект был передан без var , то изменение параметра внутри подпрограммы все равно изменит и его значение в основном коде
Код: plaintext
1.
2.
3.
 procedure  TMainForm.Button1Click(Sender: TObject);
 begin 
  (Sender  as  TButton).Caption := 'Кликнули по мне';
 end ;
...
Рейтинг: 0 / 0
const параметры
    #35530386
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const - это передача по ссылке для структур... а объект - это и так ссылка... его передавай хоть так, хоть эдак... в 32-ух битой адресации памяти при 32 битных регистрах разницы не будет...
зы: попробуйте передать в функцию 4 гигабайтный массив не по ссылке )
...
Рейтинг: 0 / 0
const параметры
    #35530477
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EgaА какая разница, каким образом там в кишках это дело устроено?
Любопытно, как Вы отнесетесь к врачу, исповедующему этот подход.

x77с точки зрения более высокого уровня, т.е. концепций ООП, такие параметры нужны для исключения логических ошибок на этапе написания кода.
Бред.

vunderПри всей вашей полемике вы забываете, что передача параметров в подпрограмму возможно ТОЛЬКО 2 способами: по значению и по ссылке.
Чтобы утверждение не было бредом, добавляйте "в Delphi".

vunderВ первом случае значение переменной копируется в стэк
Бред.

vunderИспользование const и var определят рабочу с переменными через указатели.
Ну-ну.

vunderВ этом случае, например при передачи строковых параметров, будет расходоваться меньше памяти, т.к. при передачи больших переменных по значению они будут полностью дублироваться.
Бред.
...
Рейтинг: 0 / 0
const параметры
    #35530533
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer, чем обвинить всех в бреде (с чем я не спорю, т.к. действительно бред),
лучше бы дали краткое описание своего видения вопроса. Ну или ссылку на одно
из многочисленных объяснений. :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
const параметры
    #35530732
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамлучше бы дали краткое описание своего видения вопроса.
Оно уже давно приведено в топике: официальная документация утверждает, что объявление параметра константой служит для неких оптимизаций, проводимых компилятором, и касающихся структурированных и строковых типов.
...
Рейтинг: 0 / 0
const параметры
    #35530772
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer vunderПри всей вашей полемике вы забываете, что передача параметров в подпрограмму возможно ТОЛЬКО 2 способами: по значению и по ссылке.
Чтобы утверждение не было бредом, добавляйте "в Delphi".

вот... тут у меня вопрос... предполагаю, появление в ответе что-то типа функциональных языков.... но чем теперь обозначать "Delphi"? для меня это rad
...
Рейтинг: 0 / 0
const параметры
    #35530804
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторофициальная документация утверждает, что объявление параметра константой служит для неких оптимизаций, проводимых компилятором, и касающихся структурированных и строковых типов.
Вообще то это не цель, а цель
авторA constant (const) parameter is like a local constant or read-only variable. 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. (But when you pass an object reference as a constant parameter, you can still modify the object's properties.)
А оптимизация побочный эффект
авторUsing const allows the compiler to optimize code for structured- and string-type parameters. It also provides a safeguard against unintentionally passing a parameter by reference to another routine.
При указании данного модификатора, компилятор может сохранить несколько тактов, не делая некоторых проверок и сохранений, которые пришлось бы сделать, при модификаторе var. Естественно это действует для структурных типов и строк.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
const параметры
    #35530837
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyВообще то это не цель, а цель ... А оптимизация побочный эффект
Ровно наоборот. То, что Вы называете целью, если рассмотреть его именно как "цель, к которой надо стремиться", мягко говоря, нафиг не нужно. На самом деле это не цель, а нечто вроде подсказки компилятору - добровольно принимаемое обязательство, которое позволяет компилятору сгенерировать более эффективный код.

Собственно, рано или поздно компиляторы научатся самостоятельно распознавать возможность такой оптимизации, и модификатор const станет устаревшим. Однако, как мы знаем, существуют возможности работы через указатели, что воздвигает перед подобной автоматикой серьезные препятствия.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
const параметры
    #37807372
и все-таки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как на самом деле передаются const параметры? Если функция с const параметром в dll, и надо вызвать ее из C++. На стеке должно быть значение или адрес?
...
Рейтинг: 0 / 0
const параметры
    #37807479
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и все-такиА как на самом деле передаются const параметры? Если функция с const параметром в dll, и надо вызвать ее из C++. На стеке должно быть значение или адрес?
Подозреваю, это зависит ещё и от конвенции вызовов. В обычной для дельфи register все параметры размером больше int-а передаются по ссылке, а дальше пролог функции по необходимости копирует значение в локальную память. Модификатор const собственно отменяет такое копирование, позволяя действовать прямо по переданному указателю. Если написать const например с int-параметром - подозреваю, он всё равно будет передаваться по значению, то есть игнорируя const. Не пробовал. А как оно будет вести себя, например, в cdecl - вопрос отдельной интересности.
...
Рейтинг: 0 / 0
const параметры
    #37807483
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyЭто дело компилятора, чаще всего по ссылке.
всегда по ссылке
...
Рейтинг: 0 / 0
const параметры
    #37807492
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x77 smskinНу то что изменять их значение внутри процедуры нельзя - это понятно.

если передавался объект - его свойства менять можно, всегда.

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

с точки зрения более высокого уровня, т.е. концепций ООП, такие параметры нужны для исключения логических ошибок на этапе написания кода. например, чтобы какой особо одарённый пионер не вздумал менять дескриптор подключения к СУБД или там оконный хэндл.Вы упустили очень важный момент. Объявление параметра константой и передача оного по ссылке в первую очередь необходимо для исключения копирования "длинных" параметров (типа строк) в стек вызываемой процедуры.
...
Рейтинг: 0 / 0
const параметры
    #37807497
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдОбъявление параметра константой и передача оного по ссылке в первую очередь необходимо для исключения копирования "длинных" параметров (типа строк) в стек вызываемой процедуры.
Строки не копируются в стек вызываемой процедуры. У них при отсутствии const просто инкрементируется счётчик ссылок.
...
Рейтинг: 0 / 0
const параметры
    #37807501
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

даже у wideString?
...
Рейтинг: 0 / 0
const параметры
    #37807516
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spider13softwarer,

даже у wideString?
у wideString нет счетчика ссылок.
...
Рейтинг: 0 / 0
const параметры
    #37807522
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдAnatoly PodgoretskyЭто дело компилятора, чаще всего по ссылке.
всегда по ссылкеПрошу меня извинить, не всегда.
...
Рейтинг: 0 / 0
const параметры
    #37807526
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдAnatoly PodgoretskyЭто дело компилятора, чаще всего по ссылке.
всегда по ссылке
Можешь привести ссылку на справку, где такое сказано?
...
Рейтинг: 0 / 0
const параметры
    #37807534
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На эксперименты или на анализ ассемблерного кода можешь не ссылаться.
...
Рейтинг: 0 / 0
const параметры
    #37807549
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Podgoretskyspider13softwarer,

даже у wideString?
у wideString нет счетчика ссылок.

Правильно, что в таком случае увеличивать)

Вообще, насколько я понял, то прямые значения передаются для числовых типов, для остальных же это ссылка, но могу ошибаться.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / const параметры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]