C primer 5th 第六章筆記

2022-02-26 04:35:16 字數 1744 閱讀 7661

總結:

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);

c primer 筆記,第六章

區域性靜態物件使用static宣告,宣告一次後下次再呼叫該函式,則該宣告語句則被忽略 練習6.7,第一次被呼叫時返回0,以後每次呼叫返回值加一 size t count 當函式無需修改引用形參的值時最好使用常量引用 使用實參初始化形參時會忽略頂層const 使用普通引用會極大地限制函式所能接受的實參...

c primer 筆記 第六章 函式

1.函式的返回型別不能是陣列型別或函式型別,但可以是指向陣列或函式的指標 返回陣列的指標 1 使用型別別名 typedef int arrt 10 using arrt int 10 與上面的宣告等價 arrt func int i 2 直接宣告 int func int i 10 3 使用尾置返回...

C primer 第六章筆記 初稿

用指標來傳遞多維陣列時,仍然需要傳遞二維的具體引數 可變形參 個人感覺就是乙個容器?如下class class1 private int a int b class class2 private int a int b int main class2 c2 1,2 return 0 莫名把賦值與判斷...