Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Зачем в функции переменные передают как константы? / 17 сообщений из 17, страница 1 из 1
02.10.2018, 22:20
    #39712118
Зачем в функции переменные передают как константы?
Зачем в функции переменные передают как константы?

Код: pascal
1.
2.
function func(const a: integer);
...
...
Рейтинг: 0 / 0
02.10.2018, 22:27
    #39712120
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Это троллинг такой?

P.S. Чуть быстрее и рид-онли (ну, почти).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.10.2018, 22:28
    #39712121
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
...
Рейтинг: 0 / 0
03.10.2018, 06:59
    #39712192
Зачем в функции переменные передают как константы?
Гаджимурадов Рустам , не троллинг, но я сам редко задумывался о том, зачем это делается. Однако, слышал где-то, что таким образом избегают некоторых ошибок, а вот каких именно, не знаю.
...
Рейтинг: 0 / 0
03.10.2018, 07:48
    #39712200
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Попытался изменить значение такой константы внутри функции - получишь ошибку ещё при компиляции, а не будешь думать, почему запущенная прога работает как-то странно, если не падает вообще
...
Рейтинг: 0 / 0
03.10.2018, 08:03
    #39712204
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Зачем как константы> Однако, слышал где-то, что таким образом избегают некоторых ошибок, а вот каких именно, не знаю.

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

P.S. * зато другие появятся. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.10.2018, 09:17
    #39712232
Зачем в функции переменные передают как константы?
При передаче переменной как const, она передается не по значению, а по адресу. При этом чтобы избежать изменения исходной переменной, компилятор блокирует ее использование в конструкциях "x := ". При этом никто не мешает взять от переменной адрес и выполнить операцию над указателем.

Смысл использования const есть только при передаче типов strings и record (class всегда передаётся по адресу), так как если размер передаваемого объекта слишком большой, возможно переполнения стека.
...
Рейтинг: 0 / 0
03.10.2018, 09:18
    #39712233
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Зачем как константы?,

Только что обсуждали
http://www.sql.ru/forum/593659-2/const-parametry
...
Рейтинг: 0 / 0
03.10.2018, 10:09
    #39712266
asviridenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Владимир Ш.При передаче переменной как const, она передается не по значению, а по адресу. При этом чтобы избежать изменения исходной переменной, компилятор блокирует ее использование в конструкциях "x := ". При этом никто не мешает взять от переменной адрес и выполнить операцию над указателем.

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

Половина неправильно
...
Рейтинг: 0 / 0
03.10.2018, 10:24
    #39712272
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Владимир Ш.При передаче переменной как const, она передается не по значению, а по адресу. Нет. Например const Integer передастся по значению.
...
Рейтинг: 0 / 0
04.10.2018, 13:08
    #39712957
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Владимир Ш.,

простые типы передаются по значению всегда, не зависимо от модификаторов. другие типы передаются по адресу. но есть особенности в доступе и обработке с разными модификаторами.
...
Рейтинг: 0 / 0
04.10.2018, 13:26
    #39712969
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Владимир Ш.> class всегда передаётся по адресу

Да и это, извините, тоже галиматья.
Одно дело, когда передается адрес объекта, другое - адрес переменной, хранящей указатель на объект.
...
Рейтинг: 0 / 0
04.10.2018, 13:36
    #39712980
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Вот тут довольно подробно расписано, как что передается:
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Program_Control_(Delphi)
...
Рейтинг: 0 / 0
04.10.2018, 14:59
    #39713041
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Вопрос был не "как передаются", а "зачем передают как константы". Затем, что часто генерится более оптимальный код, в случае с массивами, структурами, строками, вариантами, интерфейсами может существенно возрасти быстродействие. Плюсом идёт более формализованное переложение мысли в код (не смотря на мнение Рустама). Если правильно помню, при создании Quake Кармак, обязал добавлять const всегда когда изменение параметра не подразумевалось. Чуть легче понять мысль при чтении незнакомого кода. Та же делфа при автогенерации сеттера автоматом добавляет const Value:xxx
...
Рейтинг: 0 / 0
04.10.2018, 15:01
    #39713043
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
white_niggerВопрос был не "как передаются", а "зачем передают как константы". Ну я ссылку привел, потому что обсуждение этой темы тут возникло.
...
Рейтинг: 0 / 0
04.10.2018, 15:40
    #39713077
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
Во урлу про Кармака нашёл

"Также я теперь стал const-нацистом, и даю по рукам программисту, который не ставит const подходящим для этого переменным и параметрам."
...
Рейтинг: 0 / 0
04.10.2018, 15:45
    #39713080
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем в функции переменные передают как константы?
white_niggerКотовасиятут частный случай применения синтаксиса, имеющего разную семантику в разных языках.Поделись тайными знаниями "разной семантики" модификатора const в c и делфи
Например, параметр типа char * и const char *. В первом случае строку "строка" в качестве параметра передать нельзя.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Зачем в функции переменные передают как константы? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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