|
|
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Не до конца понятен смысл const параметров в delphi. Ну то что изменять их значение внутри процедуры нельзя - это понятно. Непонятно передаются ли const параметры по ссылке или по значению? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 13:02 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Это дело компилятора, чаще всего по ссылке. -- http://www.podgoretsky.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 13:07 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
smskinНе до конца понятен смысл const параметров в delphi. Ну то что изменять их значение внутри процедуры нельзя - это понятно. Непонятно передаются ли const параметры по ссылке или по значению? А какая разница, каким образом там в кишках это дело устроено? Причем, насколько я понимаю, это дело может меняться при изменении компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 13:13 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
smskinНу то что изменять их значение внутри процедуры нельзя - это понятно. если передавался объект - его свойства менять можно, всегда. официальная документация утверждает, что объявление параметра константой служит для неких оптимизаций, проводимых компилятором, и касающихся структурированных и строковых типов. можно, конечно, попытаться прикинуть, в чём могли бы заключаться такие оптимизации, только вот нафига? с точки зрения более высокого уровня, т.е. концепций ООП, такие параметры нужны для исключения логических ошибок на этапе написания кода. например, чтобы какой особо одарённый пионер не вздумал менять дескриптор подключения к СУБД или там оконный хэндл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 13:30 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Дело не только в логике программного кода. При всей вашей полемике вы забываете, что передача параметров в подпрограмму возможно ТОЛЬКО 2 способами: по значению и по ссылке. В первом случае значение переменной копируется в стэк и передается через него в подпрограмму. При передачи по указателю в стэк копируется только ссылка на переменную. В Delphi/Pascal для объявления передачи параметров по значеню не надо указывать никаких дополнительный директив. Использование const и var определят рабочу с переменными через указатели. Для программиста это всего лишь будет означать некоторые особенност испольвания таких переменных, а вот для компилятора - совсем другое дело. P.S. Маленький совет: все переменный, размер которых превышает 4 байта лучше объявлять как const (ну или var , если значение будет меняться). В этом случае, например при передачи строковых параметров, будет расходоваться меньше памяти, т.к. при передачи больших переменных по значению они будут полностью дублироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 15:46 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Кстати, передача объекта всегда производиться по указателю. Единственный нюанс - директива var . Если объект был передан с ее помощью, то изменение параметра внутри подпрограммы изменит и его значение в основном коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 15:49 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
vunderКстати, передача объекта всегда производиться по указателю. Единственный нюанс - директива var . Если объект был передан с ее помощью, то изменение параметра внутри подпрограммы изменит и его значение в основном коде. А если объект был передан без var , то изменение параметра внутри подпрограммы все равно изменит и его значение в основном коде Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 17:04 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
const - это передача по ссылке для структур... а объект - это и так ссылка... его передавай хоть так, хоть эдак... в 32-ух битой адресации памяти при 32 битных регистрах разницы не будет... зы: попробуйте передать в функцию 4 гигабайтный массив не по ссылке ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 17:19 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
EgaА какая разница, каким образом там в кишках это дело устроено? Любопытно, как Вы отнесетесь к врачу, исповедующему этот подход. x77с точки зрения более высокого уровня, т.е. концепций ООП, такие параметры нужны для исключения логических ошибок на этапе написания кода. Бред. vunderПри всей вашей полемике вы забываете, что передача параметров в подпрограмму возможно ТОЛЬКО 2 способами: по значению и по ссылке. Чтобы утверждение не было бредом, добавляйте "в Delphi". vunderВ первом случае значение переменной копируется в стэк Бред. vunderИспользование const и var определят рабочу с переменными через указатели. Ну-ну. vunderВ этом случае, например при передачи строковых параметров, будет расходоваться меньше памяти, т.к. при передачи больших переменных по значению они будут полностью дублироваться. Бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 17:38 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
softwarer, чем обвинить всех в бреде (с чем я не спорю, т.к. действительно бред), лучше бы дали краткое описание своего видения вопроса. Ну или ссылку на одно из многочисленных объяснений. :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 17:54 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамлучше бы дали краткое описание своего видения вопроса. Оно уже давно приведено в топике: официальная документация утверждает, что объявление параметра константой служит для неких оптимизаций, проводимых компилятором, и касающихся структурированных и строковых типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 19:31 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
softwarer vunderПри всей вашей полемике вы забываете, что передача параметров в подпрограмму возможно ТОЛЬКО 2 способами: по значению и по ссылке. Чтобы утверждение не было бредом, добавляйте "в Delphi". вот... тут у меня вопрос... предполагаю, появление в ответе что-то типа функциональных языков.... но чем теперь обозначать "Delphi"? для меня это rad ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 20:02 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
авторофициальная документация утверждает, что объявление параметра константой служит для неких оптимизаций, проводимых компилятором, и касающихся структурированных и строковых типов. Вообще то это не цель, а цель автор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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 20:39 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Anatoly PodgoretskyВообще то это не цель, а цель ... А оптимизация побочный эффект Ровно наоборот. То, что Вы называете целью, если рассмотреть его именно как "цель, к которой надо стремиться", мягко говоря, нафиг не нужно. На самом деле это не цель, а нечто вроде подсказки компилятору - добровольно принимаемое обязательство, которое позволяет компилятору сгенерировать более эффективный код. Собственно, рано или поздно компиляторы научатся самостоятельно распознавать возможность такой оптимизации, и модификатор const станет устаревшим. Однако, как мы знаем, существуют возможности работы через указатели, что воздвигает перед подобной автоматикой серьезные препятствия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 21:30 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
А как на самом деле передаются const параметры? Если функция с const параметром в dll, и надо вызвать ее из C++. На стеке должно быть значение или адрес? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 11:20 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
и все-такиА как на самом деле передаются const параметры? Если функция с const параметром в dll, и надо вызвать ее из C++. На стеке должно быть значение или адрес? Подозреваю, это зависит ещё и от конвенции вызовов. В обычной для дельфи register все параметры размером больше int-а передаются по ссылке, а дальше пролог функции по необходимости копирует значение в локальную память. Модификатор const собственно отменяет такое копирование, позволяя действовать прямо по переданному указателю. Если написать const например с int-параметром - подозреваю, он всё равно будет передаваться по значению, то есть игнорируя const. Не пробовал. А как оно будет вести себя, например, в cdecl - вопрос отдельной интересности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:05 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Anatoly PodgoretskyЭто дело компилятора, чаще всего по ссылке. всегда по ссылке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:06 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
x77 smskinНу то что изменять их значение внутри процедуры нельзя - это понятно. если передавался объект - его свойства менять можно, всегда. официальная документация утверждает, что объявление параметра константой служит для неких оптимизаций, проводимых компилятором, и касающихся структурированных и строковых типов. можно, конечно, попытаться прикинуть, в чём могли бы заключаться такие оптимизации, только вот нафига? с точки зрения более высокого уровня, т.е. концепций ООП, такие параметры нужны для исключения логических ошибок на этапе написания кода. например, чтобы какой особо одарённый пионер не вздумал менять дескриптор подключения к СУБД или там оконный хэндл.Вы упустили очень важный момент. Объявление параметра константой и передача оного по ссылке в первую очередь необходимо для исключения копирования "длинных" параметров (типа строк) в стек вызываемой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:09 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
КвейдОбъявление параметра константой и передача оного по ссылке в первую очередь необходимо для исключения копирования "длинных" параметров (типа строк) в стек вызываемой процедуры. Строки не копируются в стек вызываемой процедуры. У них при отсутствии const просто инкрементируется счётчик ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:10 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
softwarer, даже у wideString? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:12 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
spider13softwarer, даже у wideString? у wideString нет счетчика ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:18 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
КвейдAnatoly PodgoretskyЭто дело компилятора, чаще всего по ссылке. всегда по ссылкеПрошу меня извинить, не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:19 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
КвейдAnatoly PodgoretskyЭто дело компилятора, чаще всего по ссылке. всегда по ссылке Можешь привести ссылку на справку, где такое сказано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:21 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
На эксперименты или на анализ ассемблерного кода можешь не ссылаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:22 |
|
||
|
const параметры
|
|||
|---|---|---|---|
|
#18+
Anatoly Podgoretskyspider13softwarer, даже у wideString? у wideString нет счетчика ссылок. Правильно, что в таком случае увеличивать) Вообще, насколько я понял, то прямые значения передаются для числовых типов, для остальных же это ссылка, но могу ошибаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2012, 12:26 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=35530533&tid=2040444]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
65ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 401ms |

| 0 / 0 |
