複習8 函式

2021-05-24 11:16:22 字數 1064 閱讀 4764

1.內聯函式

2.引數傳遞

2.1引數傳遞的求值順序是未定義的。如f(i,i++)的引數值是未定義的,結果也是不可知的。

2.2引數傳遞一般為值傳遞,保證了實參的值不會修改,但存在效率問題。於是我們使用指標和引用做引數,但使用它們可能會修改實參。為了給呼叫者足夠的保證,我們使用const修飾它們表示不會改變實參的值,不使用則說明我們需要修改實參值。這樣的風格對程式設計是大有裨益的。

2.3指標、常量指標或引用不能指向文字量,const int* p = &1;會產生編譯錯誤,常量引用則可以。指標、常量指標或引用都不能做型別轉換,double& d = (double)i;產生編譯錯誤,常量引用可以。把常量引用特殊化,我想是為了函式呼叫和泛型程式設計的方便,具體的實現已在前面說過。考慮如下**,因為const引用不會修改實參,所以引入臨時量是合理的,這也方便了程式設計。其實常量指標也可以採用這種方式,但是c++沒有這樣做。相反,引用和指標是要改變實參的,建立臨時量或做型別轉換顯然是不合適的。

2.4陣列作為函式引數,傳遞的是到陣列首元素的指標,也就是說t作為引數傳遞時將被轉換成乙個t*。現在來考慮為什麼不能把陣列做成值傳遞,你猜對了,因為陣列是不能自表示的資料結構,他不能說明元素的個數!我們知道呼叫函式時必須先計算好它的棧大小,而函式的形參是放到棧裡去的!

3.函式呼叫與返回值

函式的呼叫過程不想再這裡贅述,說兩句返回值把。返回語句所做的就是初始化乙個具有返回型別的匿名變數。這時將對照函式的返回型別檢查返回表示式型別,並執行所有標準或使用者定義的轉換。例如double f()1被隱式轉換到double(1).這就是c++的關於返回值的定義。其實編譯器常常把這個匿名變數放在暫存器exa中,而非記憶體的棧或堆中,這樣做的好處自然是效率的提公升。這裡只做高階語言的表述,不去深察其底層或本質的東東。http://learn.akae.cn/media/index.html提供了很好的linux c學習教材,可作為複習的補充。

4.預設引數

預設引數的型別在函式宣告時檢查,在呼叫時求值。只能對排列在最後面的哪些引數提供預設值。在同乙個作用域中隨後的宣告裡,預設引數不能重複或改變。例如同理,標頭檔案中預設引數需要帶上預設值,原始檔中預設引數不能帶預設值了,否則也產生預設值重複錯誤1。

複習8 內部類

示例 package day20191106 public class inclass 靜態內部類 匿名內部類 最常見,最實用 區域性內部類 已被淘汰 成員內部類是什麼 示例package day20191106 public class clas ample public int a public...

web標準 複習 8

今天我們開始學習下拉及多級彈出選單,包含以下內容和知識點 帶下拉子選單的導航選單 絕對定位和浮動的區別和運用 css自適應寬度滑動門選單 一 帶下拉子選單的導航選單 下拉列表在一些企業 應用尤為廣泛,它存在使用方便,占用空間小等特點。之前縱向導航教程中已使用過二級導航,今天製作下橫向導航選單的二級選...

AS函式複習

actionscript 3.0 中有兩種函式型別 方法 和函式閉包 方法 如果您將函式定義為類定義的一部分或者將它附加到物件的例項,則該函式稱為方法。函式閉包 如果您以其它任何方式定義函式,則該函式稱為函式閉包 隨機函式 var randomnumber number math.random 函式...