1. 程式人生 > >C和C++的區別第一部分

C和C++的區別第一部分

1.C++可以給函式預設值

C++在定義時可以給函式預設值

1.int sum(int a,int b=10)

{

return a+b;
}

在呼叫sum 函式時不給引數b的值系統會預設b的值為10;

2.C++在給函式預設值時是從左至右如

int sum(int a=1,int b,int c)

int sum(int a=1,int b,int c)

是錯的。因為系統會產生二義性不知道該給哪個引數賦值。

1.行內函數inline

c++的行內函數是在編譯時 在呼叫點把行內函數的程式碼展開在呼叫點處,並不會產生函式符號

類如:

 Inline Int sum (int a,int b)

{return a+b;}

Main()

{

Int x=10;

Int y=20;

Sum(x,y);

}

編譯時就是

Main()

{

Int x=10;

Int y=20;

x+y;

}

並不會給sum函式開闢個新棧,而是直接的程式碼替換。

看起來行內函數和巨集很相像,那他們的區別在哪?

區別就是 巨集是單純的字元替換,在預編譯的階段,不會做任何的詞法解析,型別檢查,也就是說巨集出錯的可能性非常高,不安全。而inline內斂函式是在編譯時期,會進行詞法解析,型別檢查,詞法、型別有誤就會編譯失敗。所以說,inline相當於安全版的巨集。

行內函數只在本檔案可見。

最後值得注意的是內斂函式只算一個給編譯器的建議,也就是說編譯器可能不會使用內斂,因為某些函式使用程式碼替換會導致錯誤,比如遞迴函式,遞迴的核心就是開闢棧幀遞迴資料然後層層計算最後收尾,簡單的程式碼替換確定不了遞迴的尾巴?

3.函式的過載

c語言中函式名不能重複定義。

C++中函式的命名可以重複,但重名的函式提供的引數不能相同。因為C++的函式符號的產生是由函式名和引數型別決定的。

函式的過載必須得在同一個作用域內。