函式過載遇上函式預設值會發生什麼? 二義性

2021-07-14 11:07:52 字數 483 閱讀 9214

#include 

using

namespace

std;

int func(int a,int b,int c = 0)

int func(int a,int b)

int main()

報錯:兩個函式都可以執行,但不知道呼叫哪乙個,編譯不通過!

總結:在做產品時,如果使用「預設引數」就不要使用「函式過載」。二選一,不要同時使用,防止二義性。

編譯器呼叫過載函式的準則:

1.將所有同名函式作為候選者;

2.嘗試尋找可行的候選者;

(1)精確匹配實參型別

(2)通過預設引數能夠匹配實參型別

(3)通過預設型別轉換匹配實參

匹配失敗:

(1)最終尋找可行的候選函式不唯一,出現二義性,編譯失敗;

(2)無法匹配所有候選者,函式未定義,編譯失敗。

函式預設值 過載 inline函式

一 函式預設值 c89 不支援帶有預設值的函式 c 99 支援帶有預設值的函式 預設值注意事項 1 預設函式一般寫在宣告中 2 自右向左依次賦值 即設定預設值時應該從右至左 因為實參的傳遞是從前至後。如若不是這樣則報錯。3 預設值只能賦一次 4 預設值的限制 int compare int a,in...

內聯函式 函式過載 函式預設值

為了減少函式呼叫的開銷,引入了內聯函式機制。編譯器處理對內聯函式的呼叫語句時,是將整個函式的 插入到呼叫語句處,而不是產生呼叫函式的語句。inline int max int a,int b 乙個或者多個函式,名字相同,然而引數個數或者引數型別不同,這叫做函式的過載。編譯器根據呼叫語句的實參的個數和...

函式預設值 內聯函式 函式過載

c 在宣告函式原型的時候,可以為乙個或多個引數指定預設引數值,當函式呼叫的時候,如果沒有指定這個值,編譯器會自動用預設值替代。列如 int sum int a 1 int b 10 int main 函式預設值的特點自右向左,依次設計 預設值不能重複賦值 即如果函式宣告和函式定義分開,函式宣告設定了...