У нас есть ещё строки. Там за всем следит компилятор. >>С++ и Делфи — заметьте не Си а Си++ — это два разных языка со схожим синтаксисом. И Очень важно не путать их вместе.
Я с этой разницей тоже воюю. Многие люди к примеру считают, что в Си можно в любом месте переменные обявлять. Но я не насколько большой специалист в си/С++. Могу иногда смазать. Но я идею пытался выдать.
Здравствуйте, OdesitVadim, Вы писали:
OV>У нас есть ещё строки. Там за всем следит компилятор.
А у нас этих классов строк как собак нерезанных И за большинством из них обязательно следит компилятор.
В C++builder-е например есть AnsiString — точная копия встроенного в Delphi string. AnsiString реализован исключительно средствами C++, без поддержки компилятора.
Здравствуйте, vasmann, Вы писали:
V>Здравствуйте, Андрей Коростелев, Вы писали:
АК>>Здравствуйте, Vitaliy_www, Вы писали:
V_>>>Народ, мне нужно написать о разнице в контроле типов в етих двух языках, где лутше... где хуже, чем ето лутше, чем хуже... выскажыте свои мнения об етом! Спасибо!
АК>>И С++ и Pascal статически-типизированы. АК>>В то же время Pascal в большей степени сильно-типизированный язык (но не в такой степени, как Java, Python или С#). АК>>C++ же в большей степени слабо-типизированный язык (хотя и не в такой степени, как C). V>Вот это заявочки среди голивуда .
Здравствуйте, vasmann, Вы писали:
V>По поводу строгой типизации Object Pascal-a (бормановского) V>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?
Уточнение. Не FreeAndNil(obj: TObject), а FreeAndNil(var Obj);
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;
Так что язык тут не причём — компилятору ясно сказано, что на вход можно подавать всё что угодно. А сделали так потому, что в строгом варианте
procedure FreeAndNil(var Obj: TObject);
var
Temp: TObject;
begin
Temp := Obj;
Obj := nil;
Temp.Free;
end;
процедура становится бесполезной — она примет только объекты класса TObject, а не его наследников, поскольку аргумент передаётся по ссылке (var).
Object Pascal (Delphi) позволяет придерживаться строгой типизации, а если она мешает — обойти её явным приведением типа. Как и C++.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Здравствуйте, wallaby, Вы писали:
W>Здравствуйте, vasmann, Вы писали:
V>>По поводу строгой типизации Object Pascal-a (бормановского) V>>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?
W>Уточнение. Не FreeAndNil(obj: TObject), а FreeAndNil(var Obj);
W>
W>процедура становится бесполезной — она примет только объекты класса TObject, а не его наследников, поскольку аргумент передаётся по ссылке (var).
W>Object Pascal (Delphi) позволяет придерживаться строгой типизации, а если она мешает — обойти её явным приведением типа. Как и C++.
Это уже давно обговорили и я принес свои извенения за FreeAndNil.
Здравствуйте, SuhanovSergey, Вы писали:
V>>Не знаю чего, но вот Complier-messages это наверно единственное куда я не лазил — и как окозалось зря. SS>Что-то я не могу найти такую вкладку. Delphi6.
Там её нет. Переходите на 7, как минимум. Фишки с Unsafe кодом только с 7 появились.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[4]: Контроль типов в С++ и в Object pascal
От:
Аноним
Дата:
15.05.07 19:25
Оценка:
В Object Pascal можно написать
type
MyInt = type integer;
теперь переменные типа MyInt НЕ могут быть приравнены к integer и наоборот. Т.е. это теперь два разных типа, пусть и совпадающих по размеру. Попробуйте добиться такого штатными средствами от C++ (без всяких там бустов).
Здравствуйте, Аноним, Вы писали:
А>В Object Pascal можно написать
А>
А>type
А> MyInt = type integer;
А>
А>теперь переменные типа MyInt НЕ могут быть приравнены к integer и наоборот. Т.е. это теперь два разных типа, пусть и совпадающих по размеру. Попробуйте добиться такого штатными средствами от C++ (без всяких там бустов).
Сейчас начнется мерение пис..ми. Могу прривести тонну примеров которые штатными/нештатными средствами делфи не сделаете НИКОГДА, и что с этого?
Да кстати
type
MyInt = type integer;
procedure some(i: MyInt);
begin
end;
procedure some2;
var
index: Integer;
ii: MyInt;
begin
ii := 0;
index := 0;
index := ii;
some(index);
end;
Ни одного ворнинга, даже хинта, не говоря об "разных" типах. Един6ственное когда отказывается компилить — когда я в функцию принимающюю MyInt через var передаю Integer — это мне очеень полезно и важно