人肉保證,Delphi中的out參數

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過程函數傳遞參數的幾種方式-DLEPHI
在Delphi過程、函數中傳遞參數幾個修飾符爲Const、Var、Out。另一種不加修飾符的爲默認按值傳遞參數。一、默認方式以值方式傳遞參數procedure TForm1.ProcNormal(Value: string);beginOrigNum:=Value+' Me';lblRetur...查看完整版>>Delphi過程函數傳遞參數的幾種方式-DLEPHI
 
關于ref,out,params參數的理解(粘貼的源代碼,說明在注釋裏面)
關于ref,out,params參數的理解(粘貼的源代碼,說明在注釋裏面) 關于ref,out,params參數的理解(粘貼的源代碼,說明在注釋裏面) using System;namespace TestCS{ /// <summary> /// Class1 的摘要說明。 /...查看完整版>>關于ref,out,params參數的理解(粘貼的源代碼,說明在注釋裏面)
 
關于ref、out和params參數的理解
using System;namespace TestCS{ /// <summary> /// Class1 的摘要說明。 /// 本代碼演示了ref,out和params關鍵字在函數參數傳遞中的作用 /// </summary> class Class1 { /// <summary> /// 應用...查看完整版>>關于ref、out和params參數的理解
 
c#中ref和out參數使用時需要注意的問題
昨天寫了個關于socket接收udp包的程序,調用了socket.ReceiveFrom方法,發現了一個c#中關于ref和out參數傳遞時的問題,這裏提出來和大家共同探討一下,首先聲明,下面的結論都是本人推測,還沒有得到任何定論,若有錯...查看完整版>>c#中ref和out參數使用時需要注意的問題
 
關于ref,out,params參數的理解(粘貼的源代碼,說明在注釋裏面)
using System;namespace TestCS{ /// <summary> /// Class1 的摘要說明。 /// 本代碼演示了ref,out和params關鍵字在函數參數傳遞中的作用 /// </summary> class Class1 { /// <summary> /// 應用...查看完整版>>關于ref,out,params參數的理解(粘貼的源代碼,說明在注釋裏面)