C和C 的區別

2021-09-11 15:55:32 字數 1658 閱讀 3083

區別從以下幾個方面來分析

c++支援以下:

1.函式的預設值

在呼叫有預設值的函式時,可以不傳入形參,形參使用預設值

函式可以有預設值,

(1)自右向左依次賦予

(2)不能重複賦值

(3)一般賦在宣告上

使用預設值,少傳入乙個實參,但是彙編上會生成乙個push彙編指令,把形參預設值進行壓棧,因此從彙編層面講,並沒有因為少傳入乙個實參而減少一條彙編指令,也沒有提高效率

2.函式過載

函式過載的三要素

(1)同名

(2)引數不同

(3)同作用域

3.inline函式 編譯階段

內聯函式就是在普通函式前面加 inline關鍵字,

(1)呼叫點直接**展開

(2)inline函式和普通函式的區別

普通函式有 開棧 清棧的開銷

inline函式 沒有開棧和清棧的開銷

內聯函式必須在呼叫點之前出現,只能在本檔案作用域可見,內聯函式只在release版本起作用,只是給編譯器的建議,是否真的處理成內聯函式,最終由編譯器決定

回答方式二、

最大區別:在.編譯階段完成生成的.obj檔案中,普通函式要在符號表中生成符號,而內聯函式在編譯階段被處理,在函式的呼叫點韓函式**展開, 因此在符號表中,inline函式根本不會生成符號,因此無法進行連線,因此內聯函式只在本檔案可見,一般寫在標頭檔案中,被原始檔包含使用,內聯減少了函式呼叫棧幀的開闢和清理,提高了呼叫效率

(3) 建議

**體小的情況下 函式執行的開銷 < 函式開棧清棧的開銷

**體大的情況下 函式執行的開銷 > 函式開棧清棧的開銷

(4) inline函式和巨集的區別

inline函式 在編譯階段 有安全檢查和型別檢查

巨集是在預編譯階段被處理 ,沒有安全性和型別檢查

內聯函式是更安全的巨集

(5)inline函式的注意事項

1.寫在標頭檔案中

2.只在release版本生效

3.給編譯器的乙個建議

.基於實現的 不是基於宣告的

(6) inline函式和static函式的區別

1、作用域

2、棧幀回退與開闢

inline 沒有

static函式與普通函式一樣 有

3、產生的符號

inline不產生符號

static函式 產生符號 (local的符號)

4、引用 就是 別名

1.一定要初始化

2.引用不能引用不能取位址的值

3.引用不能改變

4.引用只能使用引用變數所引用的記憶體單元(變數)

不能返回區域性變數的位址

不能返回區域性變數的位址或引用

5.const

const 一級指標 二級指標 形參 返回值的結合const修飾的變數 常量

編譯階段 用到常量的位址會替換成常量初始化的值

常引用 引用不能區位址的資料

不能取位址的資料生成臨時量

常引用引用臨時量

杜絕間接訪問修改常量的風險 .new delete

6.名字空間作用域

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