在函式宣告或定義的地方,給函式引數加上預設的引數,在函式呼叫處,可以不必給該引數傳值,會預設傳入預設值。
必須從右向左,依次賦值。
在同一作用域中,函式引數的預設值,不可以重複賦值。
巨集函式:
優點:1、不存在棧幀的開闢
2、不存在引數的帶入
3、不存在引數的帶出
4、不存在引數的清除
缺點:1、不存在安全檢查(型別檢查)
2、不可以除錯
內聯函式:在普通函式前加上inline即可構成內聯函式,內聯函式會在呼叫點展開
問題1:內聯函式在什麼時候展開?
在編譯期展開。
不在預編譯期展開的原因:因為預編譯期不進行型別檢查,如果在預編譯期展開就無法進行型別檢查,就和巨集函式一樣了;
注意:
符號無法使用有兩種情況1、符號不存在2、符號不允許使用。符號分為local型別和global型別,local型別符號只允許在指定作用域使用,比如靜態函式在編譯期間生成的就是乙個local符號,只允許在本檔案引用。
內聯函式在realse版本不產生符號,不可以除錯。
在debug版本產生乙個local型別的符號,可以除錯,會進行棧幀開闢等動作。
inline
static
巨集函式debug版本產生local符號
realse版本不產生服啊後
產生local符號
不產生符號
debug版本進行棧幀開闢等操作
realse版本直接在呼叫點展開(編譯期)
進行棧幀開闢操作
在呼叫點直接展開(預編譯期)
dubug版本可以除錯
可以除錯
不可以除錯
有型別檢查
有型別檢查
沒有型別檢查
問題2:內聯函式一定會展開嗎?
inline是對編譯器的乙個建議,編譯器會在具體情況考慮是否處理成內聯,比如在遞迴的時候使用內聯函式,在編譯期間無法知道遞迴的次數,就無法確定展開多少次,無法展開。
函式過載有以下要素:
函式名相同
引數列表不同
處於同一作用域
注意:傳參時的型別轉換,容易出現多個過載函式都匹配的情況。
C 和C的區別
c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...
C和C 的區別
這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...
C 和C的區別
c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...