??深入學習C++還必須掌握的基礎
掌握形參帶默認的函式
1.給默認值方向:從右向左給默認值;
2.呼叫效率:如果傳默認值或者立即數(不需要從容器或記憶體取取的數字)的話都是直接將數字直接push進堆疊;沒有mov匯編指令的操作;(面試回答要往匯編上描述)
3.默認值給的地方:定義和宣告處均可以給默認值;
4.形參給默認值的時候,定義是可以多次定義這個函式的,都可以給默認值,宣告的時候也可以給,但是每個引數的默認值只能出現一次;
掌握inline行內函式
函式呼叫開銷:就是匯編生成的一系列指令,生成堆疊幀,對堆疊頂和堆疊底指標不斷操作等,對于函式命令少,執行多次,函式呼叫開銷大,不值得;
1.行內函式和普通函式的區別:①在編譯的程序中沒有函式呼叫開銷(直接在函式呼叫點將函式代碼展開)②函式也不再生成相應的函式符號(比如sum_int_int那些)③inline這個關鍵字只是建議編譯器處理成行內函式,如果編譯器發現是遞回(需要知道自己呼叫自己多少次的)或者代碼量大不適合行內等,不會設定成行內函式(可以通過查看符號表中有沒有生成符號);④inline只有再release版本才出現,在debug版本上,inline是不起作用的,因為需要除錯;(面試往原理上回答);
可以查看符號表的指令:

詳解函式多載
1.C++為什么支持函式多載,而C不支持:
C++符號函式名取決于:函式名+引數串列, 而C符號函式名取決于:函式名;
2.函式多載需要注意:
①一組函式,函式名相同,引數串列個數或者型別不同,這組才能稱為函式多載;僅僅回傳值不同,必然不是多載;
②注意??一組函式稱得上多載,一定是在同一個作用域中;在函式呼叫點會尋找最近作用域去呼叫;
③const或volatile的時候怎么影響形參型別:詳細
3.C++和C語言之間如何相互呼叫:
①C++呼叫C:無法直接呼叫,因為兩者產生的函式符號名不一樣;
extern "C" {
int sum(int a, int b)//宣告函式,說明這個函式是在C中宣告的,用C的生成函式符號規則,去尋找;
}
②C呼叫C++:
extern "C" {
int sum(int a, int b) { //在c++里按照C規則去生成給C用
return a + b;
}
}
③通用方式的代碼:
#ifdef _cplusplus //_cplusplus是c++內置的宏(簡單替換),如果是C++編譯器就會進入這個if和endif的代碼,不是就不會進入;
extern "C" {
#endif
int sum(int a, int b) {
return a + b;
}
#ifdef _cplusplus //同理
}
#endif
多型問題:靜態多型(編譯時期):函式多載; 動態多型(運行時期):后面多型會講到!
全面掌握const的用法
1.const理解
const修飾的變數不能再作為左值!初始化后不能再被修改;
2.C和C++中const的區別是什么
??const的編譯方式不同,C中const當作一個變數來編譯生成指令;而C++中,所有const常量名字出現的地方,都被常量初始值替換了!!!
C:

C++:

如何用C++的const實作C的效果:

掌握const和一二級指標的結合應用1\2
1.const和一級指標的結合
const修飾的量(即常量)和 普通變數的區別:①編譯方式不同(會編譯期間替換);②不能作為左值(即不能再改變)
結合情況:

const和指標轉換公式:

經典面試:
2.const和二級(多級)指標的結合
多級指標模型:

const和多級指標的型別轉換:(可以采用相同/可推部分消除!)


(上面寫錯,紅色最后一句,q是普通指標,賦予存常量的地址,但是*q的型別指明b的值卻是可以改的,違背了b的值不能變,所以不能這樣轉換)
消除方法:
1)都轉化為指標,兩邊都只帶有*和const;2)看const是否不參與型別,能不能去掉const; 3)消除等式中相同或者可以推出的部分;4)依據規則看看是否可以型別轉換;
練習:

掌握C++的左值參考和初識右值參考
參考和指標的區別:①從匯編層面回答,兩者操作(定義改值等)都一樣,將變數地址(不能將常量賦值給參考,因為常量沒有地址)存在指標中,用值的時候將指標的地址拿出來然后解參考獲取值;②參考是一種更加安全的指標,參考只有一級參考,指標有多級指標;③參考一開始就要賦值,且后面不能更改,指標沒有這樣的規則;
1.左值參考和右值參考

const、指標、參考的結合使用
const和參考的結合使用看上面;
指標和參考的結合可以將參考還原成指標再去思考問題(不然容易陷入對錯中):

深入理解C++的new和delete
malloc和free是C的庫函式; new和delete是C++運算子;
1.new和malloc的區別?delete和free的區別?
細看初識C++教程筆記
2.new有多少種?

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482112.html
標籤:C++
上一篇:堆
下一篇:樹論筆記
