| 導購 | 订阅 | 在线投稿
分享
 
 
 

人肉保證,Delphi中的out參數

來源:互聯網網民  2006-11-04 12:44:05  評論

Delphi裏面,用關鍵字var或out,可以讓函數參數按傳遞引用,奇怪的是,var和out根本沒有本質上的區別,按官方的說法:

An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input.

看上去,好象是說過程裏不能去讀out參數的值,因爲它的初始值是不可知的,但實際上如果你讀了,編譯器連個警告都沒有,而且out參數也並不是被調用者事先清零(象C#那樣),它唯一的用處就是讓寫過程的程序員警惕一下,這個參數沒有什麽初始值的,只能給它賦值,而永遠不要去用它的值……這一切只能靠程序員人肉保證,編譯器一點忙都幫不上。

{ 沒有一點警告 }

var

tmp: Integer;

procedure Foo(out v: Integer);

begin

tmp := v;

v := 1;

end;

 
特别声明:以上内容(如有图片或视频亦包括在内)为网络用户发布,本站仅提供信息存储服务。
 
Delphi裏面,用關鍵字var或out,可以讓函數參數按傳遞引用,奇怪的是,var和out根本沒有本質上的區別,按官方的說法: An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input. 看上去,好象是說過程裏不能去讀out參數的值,因爲它的初始值是不可知的,但實際上如果你讀了,編譯器連個警告都沒有,而且out參數也並不是被調用者事先清零(象C#那樣),它唯一的用處就是讓寫過程的程序員警惕一下,這個參數沒有什麽初始值的,只能給它賦值,而永遠不要去用它的值……這一切只能靠程序員人肉保證,編譯器一點忙都幫不上。 { 沒有一點警告 } var tmp: Integer; procedure Foo(out v: Integer); begin tmp := v; v := 1; end;
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有