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....