Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Параметры функций   Найти похожие ветки 

 
DenisNew   (2007-02-09 14:49) [0]

Добрый день.
Помогите пожалуйста понять каким образом параметры функций передаются. К примеру, есть функция

function EnumValues(const Param1: Boolean; var Param2: Word; Param3 : integer): boolean

Что такое "const", "var", и просто Param3 без никакого объявления?
Мое представление:
const Param1- параметр передается как есть и изменять его нельзя внутри этой функции.
var Param2 - этот параметр можно изменять, причем после его изменения он будет возвращен в ту функцию, которая вызывала функцию EnumValues.
Param3 - параметр скопируется в функции EnumValues и с ним можно проводить любые операции и только в самой EnumValues.

Вот с этими еще вроде более менее мне ясно.
Но когда я вижу в параметрах функций указатели с такими объявлениями const и var, мне становится совсем не ясно зачем оно.
к примеру :
procedure SetForm(const aForm: TForm);
почему const? имелось в виду что параметры формы изменять нельзя или же чтобы избежать копирования формы, с теми мыслями, что будет медленее без const?

А в этих процедурах что имеется в виду?
procedure WriteSome(const lpBuffer: Pointer);
procedure WriteSome2(var lpBuffer: Pointer);

Спасибо.


 
Игорь Шевченко ©   (2007-02-09 15:02) [1]


> А в этих процедурах что имеется в виду?
> procedure WriteSome(const lpBuffer: Pointer);
> procedure WriteSome2(var lpBuffer: Pointer);
> procedure WriteSome2(lpBuffer: Pointer);


в первой процедуре внутри нее параметру lpBuffer нельзя присваивать значение.
во второй процедуре, значение, присвоенное в вызываемой процедуре параметру lpBuffer будет видно в вызывающей процедуре.
в третьей процедуре (это уже я добавил), значение переменной lpBuffer в вызываемой процедуре присваивать можно, но оно не будет видно в вызывающей процедуре.


 
Сергей М. ©   (2007-02-09 15:21) [2]


> почему const?


А бог его знает, что такое в дан.случае TForm)

Если TForm - это идентификатор класса, то по барабану, имется там префикс const или нет его.


> А в этих процедурах что имеется в виду?


procedure WriteSome(const lpBuffer: Pointer);

В процедуру передается копия значения неких данных указательного типа, изменять копию незьзя.

procedure WriteSome2(var lpBuffer: Pointer);

В процедуру передается копия адреса местонаходнения в памяти значения неких данных указательного типа, имея этот адрес можно изменять данные по этому адресу


 
Desdechado ©   (2007-02-09 15:25) [3]

> procedure SetForm(const aForm: TForm); почему const? имелось
> в виду что параметры формы изменять нельзя или же чтобы
> избежать копирования формы, с теми мыслями, что будет медленее без const?
Это означает, что подменить форму другой в процедуре нельзя, а вот ее параметры менять можно, т.к. объекты передаются по ссылке.


 
DenisNew   (2007-02-09 15:32) [4]

Теперь понял. Спасибо большое.


 
Игорь Шевченко ©   (2007-02-09 15:35) [5]


> Если TForm - это идентификатор класса, то по барабану, имется
> там префикс const или нет его.


Не по барабану


 
Loginov Dmitry ©   (2007-02-09 16:15) [6]

> А в этих процедурах что имеется в виду?
> procedure WriteSome(const lpBuffer: Pointer);
> procedure WriteSome2(var lpBuffer: Pointer);


В обеих процедурах передается одинаковым способом одно и то же значение (по ссылке). Однако модификатор const предписывает компилятору пресекать попытки изменения переменной lpBuffer. В некоторых случаях компилятор и вовсе может сгенерировать разный код в зависимости от наличия var, const и без оных. Поэтому например при передаче строки в процедуру (если изменять ее там не нужно), нужно использовать const. Другие варианты при обработке строки спровоцируют либо генерацию более медленного кода (при использовании var), либо заставять создать копию переданной строки (если не использовать модификаторы).



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
15-1170667944
pasha_golub
2007-02-05 12:32
2007.02.25
Визуализация сортировки


2-1170677592
Drone
2007-02-05 15:13
2007.02.25
Вопрос касается удаления записи из типизированного файла.


2-1170757551
ymb
2007-02-06 13:25
2007.02.25
3-мерная гистограмма


1-1167921744
Ragazor
2007-01-04 17:42
2007.02.25
Выделение цветом в Devex гриде


2-1170756864
Cara
2007-02-06 13:14
2007.02.25
ADOConnection и Acceess