нет overloaded функции
function GetVal(var AVal: Int64): Boolean;
var Val: UInt32;
GetVal(Int64(Val));
А вот так работает:
function GetVal(var AVal: Integer): Boolean;
var
Val: UInt32;
GetVal(Integer(Val));
Это из-за разной разрядности?
Видимо да, из-за разного размера
разный размер переменных. мне, к слову, другое пишет: [dcc32 Error] Unit15.pas(36): E2197 Constant object cannot be passed as var parameter
Чо, так можно приводить? Не верю)
приводить можно. но такая фигня получается (ц) анекдот
Delph 11 - работает
Типы разные, а при var - типы должны быть идентичные.
необязательно, на самом деле, но конкретно тут язык отказывается приводить к типу другого размера
Основы Паскаля и статической типизации
вот этот код работает прямо сейчас: var currSubnet, commonSubnet: Cardinal; ... if subnets.FindFirst(Integer(currSubnet), dummy) then repeat у FindFirst оба параметра передаются по ссылке
Главное понимать, что делаешь и какие могут быть подводные камни
размер как бы тут одинаковый
я так и написал
Не правильно это
почему нет? если автор кода так видит
Это говнокод: могут возникнуть проблемы с безопасностью кода. Но если автор так видит, автору решать.
бывают случаи что не говнокод. и вот так бывает не говнокод, хотя можно расписать лучше: function TMedicalFile.Read64Float(SeekTo: integer; NeedSwap: boolean): double; var Temp: int64 absolute Result;
Бывают, но @rouse_79 раскритиковал такой код. Хотя такой вариант по мне норм.
угу, он лучше решение приводил. но мне в целом норм и так
Я не критиковал, а разьяснял что это может применяться только в тех случаях для которых оно и было задумано, а именно для обхода ограничений языка. А таковых случаев на практике мне встречался только один, во всех других достаточно было адресной арифметики.
В декларации знаковое 64-битное целое, при вызове пытаешься передать беззнаковое 32-битное. Очевидно, компилеру нужно указать явное приведение и показать, что ты понимаешь, что делаешь. P.S. Т.е. логика такая: приводишь к 32-разрядному Integer, а он уже совместим по типу с Int64
Не пропускает и при приведении к Integer
Обсуждают сегодня