Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Зачем в функции переменные передают как константы?  [new]
Зачем как константы?
Guest
Зачем в функции переменные передают как константы?

function func(const a: integer);
...
2 окт 18, 22:20    [21693459]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59466
Это троллинг такой?

P.S. Чуть быстрее и рид-онли (ну, почти).

Posted via ActualForum NNTP Server 1.5

2 окт 18, 22:27    [21693470]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1203
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Parameters_(Delphi)#Constant_Parameters
2 окт 18, 22:28    [21693473]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Зачем как константы?
Guest
Гаджимурадов Рустам, не троллинг, но я сам редко задумывался о том, зачем это делается. Однако, слышал где-то, что таким образом избегают некоторых ошибок, а вот каких именно, не знаю.
3 окт 18, 06:59    [21693612]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Любезный
Member

Откуда:
Сообщений: 566
Попытался изменить значение такой константы внутри функции - получишь ошибку ещё при компиляции, а не будешь думать, почему запущенная прога работает как-то странно, если не падает вообще
3 окт 18, 07:48    [21693630]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59466
Зачем как константы> Однако, слышал где-то, что таким образом избегают некоторых ошибок, а вот каких именно, не знаю.

Это несерьёзно, книжно-теоретический уровень.
Для себя возьми за привычку рид-онли объявлять
как const, а не var - и достаточно. Со временем и с
опытом подобные вопросы отпадут*.

P.S. * зато другие появятся. :)

Posted via ActualForum NNTP Server 1.5

3 окт 18, 08:03    [21693635]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Владимир Ш.
Member

Откуда: г. Москва
Сообщений: 32
При передаче переменной как const, она передается не по значению, а по адресу. При этом чтобы избежать изменения исходной переменной, компилятор блокирует ее использование в конструкциях "x := ". При этом никто не мешает взять от переменной адрес и выполнить операцию над указателем.

Смысл использования const есть только при передаче типов strings и record (class всегда передаётся по адресу), так как если размер передаваемого объекта слишком большой, возможно переполнения стека.
3 окт 18, 09:17    [21693677]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1827
Зачем как константы?,

Только что обсуждали
http://www.sql.ru/forum/593659-2/const-parametry
3 окт 18, 09:18    [21693678]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
asviridenkov
Member

Откуда:
Сообщений: 3843
Владимир Ш.
При передаче переменной как const, она передается не по значению, а по адресу. При этом чтобы избежать изменения исходной переменной, компилятор блокирует ее использование в конструкциях "x := ". При этом никто не мешает взять от переменной адрес и выполнить операцию над указателем.

Смысл использования const есть только при передаче типов strings и record (class всегда передаётся по адресу), так как если размер передаваемого объекта слишком большой, возможно переполнения стека.


Половина неправильно
3 окт 18, 10:09    [21693735]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5121
Владимир Ш.
При передаче переменной как const, она передается не по значению, а по адресу.
Нет. Например const Integer передастся по значению.
3 окт 18, 10:24    [21693752]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2969
Владимир Ш.,

простые типы передаются по значению всегда, не зависимо от модификаторов. другие типы передаются по адресу. но есть особенности в доступе и обработке с разными модификаторами.
4 окт 18, 13:08    [21695115]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Котовасия
Member

Откуда:
Сообщений: 1187
Владимир Ш.> class всегда передаётся по адресу

Да и это, извините, тоже галиматья.
Одно дело, когда передается адрес объекта, другое - адрес переменной, хранящей указатель на объект.
4 окт 18, 13:26    [21695143]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
s62
Member

Откуда: Жуковский
Сообщений: 859
Вот тут довольно подробно расписано, как что передается:
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Program_Control_(Delphi)
4 окт 18, 13:36    [21695158]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1948
Вопрос был не "как передаются", а "зачем передают как константы". Затем, что часто генерится более оптимальный код, в случае с массивами, структурами, строками, вариантами, интерфейсами может существенно возрасти быстродействие. Плюсом идёт более формализованное переложение мысли в код (не смотря на мнение Рустама). Если правильно помню, при создании Quake Кармак, обязал добавлять const всегда когда изменение параметра не подразумевалось. Чуть легче понять мысль при чтении незнакомого кода. Та же делфа при автогенерации сеттера автоматом добавляет const Value:xxx
4 окт 18, 14:59    [21695302]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
s62
Member

Откуда: Жуковский
Сообщений: 859
white_nigger
Вопрос был не "как передаются", а "зачем передают как константы".
Ну я ссылку привел, потому что обсуждение этой темы тут возникло.
4 окт 18, 15:01    [21695306]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1948
Во урлу про Кармака нашёл

"Также я теперь стал const-нацистом, и даю по рукам программисту, который не ставит const подходящим для этого переменным и параметрам."
4 окт 18, 15:40    [21695393]     Ответить | Цитировать Сообщить модератору
 Re: Зачем в функции переменные передают как константы?  [new]
Котовасия
Member

Откуда:
Сообщений: 1187
white_nigger
Котовасия
тут частный случай применения синтаксиса, имеющего разную семантику в разных языках.
Поделись тайными знаниями "разной семантики" модификатора const в c и делфи

Например, параметр типа char * и const char *. В первом случае строку "строка" в качестве параметра передать нельзя.
4 окт 18, 15:45    [21695400]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить