C++ primer 5th 第六章筆記
阿新 • • 發佈:2018-12-08
總結: 6.1 基礎 : 陣列 和 函式不能充當返回值, 可以使用指向他們的指標. 自動變數: 生存週期 = 作用域 區域性靜態變數: 生存週期 > 作用域 函式宣告 = 函式原型 6.2 引數傳遞: 值傳遞: 變數,指標,函式(傳值呼叫) 引用傳遞 : 避免大量拷貝,const 修飾能擴大其型別容納範圍。 形參的頂層const會被忽略掉. 陣列當作引數會被退化成指標 [ 指向下一維度陣列指標] 解決方式: 1.使用整數形參 說明其退化前的維度 2.使用陣列引用方式傳遞, 但是就只能傳遞固定維度的陣列了 可變引數列表: 1.initializer_list : 內部全是const, 且拷貝賦值共享元素. 2.可變引數模板 3.C介面的 ... , 此時應該使用C支援的資料型別當作實際引數. 6.3 return : 使用返回值初始化一個臨時量。 C++11規定可以返回 {}, 只要接受的資料能接受 [ 返回型別不能是陣列型別] 返回指向陣列的指標的方式:[引用也適用] 1.類型別名: using arrT = int[10]; arrT *func(int); 2.不使用類型別名: int (*func(int))[10]; 3.尾置返回型別[C++11] auto func()->int(*)[10]; 4.decltype方式: int a[10]; decltype(a) *func(); 6.4 函式過載: 返回型別, 頂層const不能充當過載的條件。 const_cast 可以讓非常量版本函式呼叫 常量版本的函式。[指標 和 引用型別形參] 6.5 特殊的語言特性: 預設實參: 書寫在都檔案當中,可多次定義. 行內函數: 定義在標頭檔案, 可展開, 無複雜控制語句的函式 constexpr 函式: 引數型別 和 返回值都必須是字面值型別。 函式體只能有一條return 語句 返回值是否是constexpr 看引數。 除錯幫助: cassert 標頭檔案中的巨集, 以及__func__ 和 __FILE__,__TIME__, __LINE__,__TIME__ 等預處理變數 6.6 函式匹配: 候選函式集合 : 名字 和 可見性來篩選 可行函式集合 : 引數的數量 和 可行的型別匹配篩選 最佳匹配: 每單個引數來看, 如果每個引數的最佳匹配相同就有最佳匹配, 否則ambiguous [ 有一套等級劃分來決定型別匹配的優劣 ] 6.7 函式指標: 引數是函式指標: void func(int f(int,int)) void func(int (*pf)(int,int)) //等價於上 返回函式的指標: 別名方式: using funcType = int (int, int); funcType * func(); 不用別名方式 int (*func())(int, int){} 尾巴置型別放複雜型別: auto func() -> int (*)(int, int);