引數對應
選取最符合項目在目前的範圍,函數呼叫中所提供的引數的函式宣告的多載函式。 如果找不到適用的函式,會呼叫該函式。 「 適合的"在此內容中表示下列其中一項:
找不到完全相符。
執行一般的轉換。
執行整數提升。
標準轉換成所需的引數的型別存在。
使用者定義轉換 (轉換運算子或建構函式) 為您想要的引數的型別存在。
找不到一個省略符號所代表的引數。
編譯器會建立一組候選函式,每個引數。 函式的實質引數,在那個位置可轉換型式的引數的型別是候選函式。
一組相符的函式的 「 最佳 」 的每個引數,建置、 並且選取的函式所有集合的交集。 如果交集包含一個以上的函式,多載化模稜兩可,並產生錯誤。 最後選取的函式一定是具有較佳較相符群組中的函式至少一個引數。 如果這不是大小寫 (如果沒有清楚的勝利者),函式呼叫會產生錯誤。
請考慮下列宣告 (函式會被標示Variant 1, Variant 2,和Variant 3下, 面討論中的識別):
Fraction &Add( Fraction &f, long l ); // Variant 1
Fraction &Add( long l, Fraction &f ); // Variant 2
Fraction &Add( Fraction &f, Fraction &f ); // Variant 3
Fraction F1, F2;
請考慮下列的陳述式:
F1 = Add( F2, 23 );
前面的陳述式會建立兩組:
具有第一個引數的型別分數組 1: 候選函式 |
集合 2: 候選函式 Whose 第二個引數可以轉換成 int 型別 |
---|---|
變數 1 |
變數 1 (int可以轉換成long使用標準的轉換) |
Variant 3 |
|
設定 [2] 中的函式都有其功能是從實際的參數型別隱含地轉換成的型式參數型別,而且在這類函式之間有 「 成本 」,將實際的參數型別轉換成它的型式參數型別是最小的函式。
下列兩個集合的交集是 Variant 1。 模稜兩可的函式呼叫的範例是:
F1 = Add( 3, 6 );
前述的函式呼叫會建立以下設定:
組 1: 候選函式,讓第一個引數的 int 型別 |
集合 2: 候選函式,有第二個引數的 int 型別 |
---|---|
Variant 2 (int可以轉換成long使用標準的轉換) |
變數 1 (int可以轉換成long使用標準的轉換) |
請注意這兩組之間的交集是空的。 因此,編譯器會產生錯誤訊息。
比對的函式的引數的 n 的預設引數會被視為 n+ 1 獨立運作,各有不同數目的引數。
省略符號 (...) 動作,作為萬用字元。 它比對任何實際的引數。 這可能會導致許多模稜兩可的集合,如果您不要設計您多載函式集合若具有必須特別小心。
注意事項 |
---|
無法判斷模稜兩可的多載函式,直到遇到函式呼叫。此時,將會建置在函式呼叫時,每一個引數,並判斷是否存在於模稜兩可的多載。這表示產生模稜兩可保留在您的程式碼,除非它們 evoked 的特定函式呼叫。 |