通過我寫博客的總結: delphi 設計修飾符的目的 就是這樣,就是想讓你告訴編譯器,參數是否會再函數內發生改變,或輸出out。因此請養成習慣,不要省略。函數
1.無修飾符:spa
delphi會當成 unkown 來處理,這個時候 處理的很好,可是效率低(好比string等堆棧式存儲的類型,他是會把指針複製一份入棧的,以防止你函數內部修改,由於一旦你函數內部修改了,爲了不影響原來調用此函數的函數內部的值跟着連帶改變,因此他是把棧中的指針複製一份,若函數內部發生修改,就用這個新入棧的指針指向 新開闢的內存空間,這樣不影響調用者內部的值發生連帶改變。)可見delphi爲了 開發者 設想的 不少啊,你少些了代碼,delphi依然讓你儘量的不犯錯,可是這是以犧牲效率爲代價的。設計
2.const修飾符 指針
若參數再函數內部 不會發生改變,那麼儘可能多用這個,由於這個是直接把變量的指針自身傳遞過去,並無把指針複製一份入棧,即沒有任何新入棧的數據,因此效率高。包括 類的屬性、記錄的成員變量、接口等。接口
都是這個規則。內存
3.var 修飾符開發
若參數 不管是string 仍是 object 仍是 interface 只要參數 須要再函數內部發生改變,那麼就要 使用var 。var 也是直接傳變量自身,沒有複製變量指針新入棧。且容許 函數內部修改。編譯器
4.out 修飾符博客
我猜想delphi發明這個修飾符的目的是 讓函數 能夠對外輸出一個實例變量。function abc(a: string): tobject; 與 procedure abc(a: string; out b: tobject) 相比,或許用out 更能節省前臺的代碼。string
即便不是爲了節省前臺的代碼,那麼一個函數 若是想輸出一個實例變量 也又多了一種方式。更加靈活。因此 如上 你若是想輸出b ,那麼請你 不要對b進行初始化,由於即便你初始化了,b進入方法abc後
以前的初始化也會被洗刷掉,那麼又爲什麼初始化呢,既然是函數向外輸出,那麼又爲何,你又要初始化後再傳入函數呢。