關於C 的一些細節 五 函式 中級

2021-03-31 21:45:07 字數 1773 閱讀 6803

8.1內聯函式

* 通常做法是: 省略原型,將整個定義(函式頭+函式體**)放在本應該提供原型的地方.

* 內聯函式不能遞迴.  也不能過大,一般只有1,2行**.

* 與巨集比較: 

巨集是通過文字替換來實現的. 有弊端.

內聯函式是用函式體替換呼叫函式的地方, 省略函式呼叫. //在記憶體中的情況.

8.2 引用變數.

* 引用是已定義的變數的別名. 和原變數指向同一記憶體位址.

* 主要用途: 用作函式的形參,函式將使用原始資料,而不是其拷貝, 就和指標的作用一樣.    主要是引用結構和類物件引數.

* 宣告引用時進行初始化, 引用更接近 const 指標,一旦與某個變數關聯起來,就一直"效忠"於它.

而不能想指標那樣: 先宣告,後賦值.

8.3 應盡可能將引用形參宣告為 const.

* 可以避免無意中修改資料的程式設計錯誤.

** 使用 const 使函式能夠處理 const 和非 const 實參,否則將只能接受非 const 資料.

* 使用了const引用,使函式能夠正確生成並使用臨時變數: 如果實參不匹配,則其行為類似於按值傳遞,為確保原始資料不被修改,將使用臨時變數來儲存值.

8.4 臨時變數

* 如果接受引用引數的函式意圖為修改變數,則建立臨時變數將阻止這種意圖的實現.

* 產生條件1: 實參的型別正確,但不是左值. 

左值引數是可被引用的資料物件,如: 變數,陣列元素,結構成員,引用,被解除引用的指標(*p) .

非左值: 字面常量和包含多項的表示式.

* 產生條件2: 實參的型別不正確,但可以轉換為正確的型別.

8.5 當函式返回指向資料物件的引用或指標時,該物件最好在函式結束後繼續存在.

* 可以讓 函式返回 作為引數,傳遞給它的引用或指標,

typea a,b;

typea & fun ( typea & aa );

fun (a) = b; // 等效於: fun (a); a = b;

返回引用的函式(名)實際上是被引用的變數的別名,指向被引用的變數的記憶體位址

* 另一種方法: 用new 來分配新的記憶體來儲存,

typet & clone ( typet & t ) //返回引用, 指向新的記憶體位址.

8.6函式傳遞-引用變數使用小結:

8.6.1 不修改變數:

* 如果資料很小,如內建資料型別或小型結構,則按值傳遞

* 如果資料物件是陣列,則使用指標,這是唯一的選擇,指標宣告為指向 const 的指標.

* 如果資料物件是較大結構,則使用 const 引用或 const 指標.

* 如果資料物件是類物件,則使用 const 引用,引用傳遞是傳遞類物件引數的標方式.

8.6.2 修改變數:

內建資料型別使用指標或引用;陣列只能使用指標;結構體使用引用或指標;類物件使用引用,

8.7 預設函式

* 在原型設定: 預設引數值是初始化值.

* 必須從右向左新增預設值.

* 實參按從左向右的順序依次被賦值給相應的形參,不能跳過任何引數.

8.8 函式過載(多型)

* 函式特徵標: 函式引數列表,引數排列順序都相等,函式特徵標才相等. 函式特徵標不同才能過載.

* 型別的引用和型別本身視為同一特徵標.//從編譯器角度看一樣.

* 也不區分const 和非 const變數.//將非const值賦值給const變數合法,反之非法.

8.8 名稱修飾苻: c++用它來跟蹤每乙個過載函式.

8.9 函式模板 [......待續]

關於C 的一些細節 一

一.概述 b.s.真正的程式設計需要比純粹的原理更重要 資料 演算法 程式 通用程式設計 gp強調演算法 oop強調資料 可移植性和標準 將依賴於硬體的部分放在函式模組中.二.c 程式設計 1.關於標頭檔案 iostream 新編譯器 使用 include using namespace std 老...

C 一些細節

include include pthread.h using namespace std static pthread mutex t mutex class single class single public static single instance static single getin...

C 的一些細節

1.c 中,將負數賦值給unsigned是完全合法的。例如,將 1賦值給unsigned char,那麼結果是255.2.c 中,double的精度和計算速度都要超過float,long double則需要承擔額外的執行代價。3.std ou t hi d endl 等價於std out hi 4....