為了減少函式呼叫的開銷,引入了內聯函式機制。編譯器處理對內聯函式的呼叫語句時,是將整個函式的**插入到呼叫語句處,而不是產生呼叫函式的語句。
inline int max(int a,int b)
乙個或者多個函式,名字相同,然而引數個數或者引數型別不同,這叫做函式的過載。
編譯器根據呼叫語句的實參的個數和型別判斷具體呼叫的是哪個函式。
(1) int max(double f1,double f2)
(2) int max(int n1,int n2)
(3) int max(int n1,int n2,int n3 )
max(3.4,2.5);//呼叫(1)
max(2,3);//呼叫(2)
max(1,2,3);//呼叫(3)
max(2,2.4);//error,二義性,編譯器不知道呼叫哪個函式;如果沒有第一函式,則引數會進行轉化呼叫第二個函式;如果沒有第二個函式,則呼叫第乙個函式;
int
max(int a,int b=2)
[error] call
of overloaded 'max(int)'
is ambiguous
這時編譯器不知道呼叫哪個函式,因此報錯。
note:python 中沒有過載函式
在c++中,定義函式的時候可以讓最右邊的連續若干個引數有預設值,那麼呼叫函式的時候,若相應位置不寫引數,引數就是預設值。
void fun(int a,int b=2,int c=3)
fun(10);//等效於fun(10,2,3)
fun(10,10);//等效於fun(10,10,3)
fun(10, ,10);//不行,只能最右邊的連續若干個引數預設
python中:
def fun(a,b=2,c=3):
print a
print b
print c
fun(10)
fun(1,b=2)
前兩個正確,下邊乙個錯誤,錯誤原因:
non-keyword arg after keyword arg
fun(1,b=2,4)
函式預設值 內聯函式 函式過載
c 在宣告函式原型的時候,可以為乙個或多個引數指定預設引數值,當函式呼叫的時候,如果沒有指定這個值,編譯器會自動用預設值替代。列如 int sum int a 1 int b 10 int main 函式預設值的特點自右向左,依次設計 預設值不能重複賦值 即如果函式宣告和函式定義分開,函式宣告設定了...
函式預設值,內聯函式和函式的過載
實參匹配形參時從左向右匹配,但是從右向左依次賦預設值。函式預設值不能重複複製 例如 int fun int a,int b,int c 30 int fun int a,int b,int c 30 return a b c 在宣告時給定預設值,在定義時仍然給預設值,當給出的兩個預設值不同時導致編譯...
函式的預設值 過載以及內聯函式
一 函式的預設值 給函式形參賦預設值時要注意的三點 1.從右向左依次賦預設值 int sum int a,int b,int c 10 正確 int sum int a,int b 10,int c 編譯程式報錯 sum 缺少引數 3 的預設引數 聯想記憶 我們都知道實參與形參的匹配是從左到右進行匹...