第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

函數(shù)可以重載的條件

函數(shù)重載的對參數(shù)的要求是:參數(shù)個數(shù)不同,參數(shù)類型不同,它們是和還是或的關(guān)系?

正在回答

3 回答

或的關(guān)系。


但注意這里有坑:

函數(shù)在傳參時,參數(shù)是可以進(jìn)行自動轉(zhuǎn)換的。假如調(diào)用函數(shù)時傳的參數(shù)類型沒有完全匹配任何一個可重載函數(shù),而且都可以進(jìn)行類型轉(zhuǎn)換的話,編譯器會報歧義錯誤的。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

GameDesigner_DaC 提問者

那如果是或的關(guān)系,也就是說參數(shù)類型可以相同,如果僅僅參數(shù)個數(shù)不同,會不會被理解為省略了某些參數(shù)的函數(shù)呢?說具體點(diǎn)就是有默認(rèn)值的函數(shù)也是可以省略參數(shù)的,這樣會讓它跟重載函數(shù)看起來形式完全一樣,造成歧義。
2015-06-22 回復(fù) 有任何疑惑可以回復(fù)我~
#2

onemoo 回復(fù) GameDesigner_DaC 提問者

確實(shí)有可能造成歧義。 這里寫不開了,我在后面的回復(fù)中舉了個栗子...
2015-06-23 回復(fù) 有任何疑惑可以回復(fù)我~

確實(shí)有可能造成歧義。

這兩個基本規(guī)則是“或”的關(guān)系。但編譯器會需要更多的信息來確定到底調(diào)用哪個函數(shù),步驟為:

1. 先確定同名函數(shù)都有哪些,并且是在調(diào)用點(diǎn)“可見的”,這些函數(shù)就是“候選函數(shù)”。

2. 判斷每一個候選函數(shù)的參數(shù)是否滿足你的調(diào)用參數(shù)(不考慮返回值類型),這些選出的函數(shù)被稱為“可行函數(shù)”。這里面就包括參數(shù)數(shù)量不同但擁有默認(rèn)參數(shù)值的參數(shù)。 如果根本就選不出來,就直接報錯。

3. 如果可行函數(shù)不止一個,那么就看有沒有哪個函數(shù)的參數(shù)類型可以“完全”匹配調(diào)用參數(shù)類型,有的話就選它。 如果都需要進(jìn)行參數(shù)轉(zhuǎn)換,那么就有歧義,編譯器會報錯。


比如重載了函數(shù)fun:

void?fun(int);?//?#1
void?fun(int,?int);?//?#2
void?fun(double,?double?=?1.0);?//?#3

當(dāng)你這樣調(diào)用:func(1.0); 就會調(diào)用第三個fun。 ?首先第二個fun會被排除掉,第一個和第三個fun會成為“可行函數(shù)”,但是第三個fun的第一個參數(shù)類型能完全匹配1.0,而第一個fun得需要進(jìn)行參數(shù)類型轉(zhuǎn)換。

但如果你這樣調(diào)用: fun(1); 會調(diào)用第一個fun,這時可行函數(shù)仍為#1和#3,但是第一個可以完全匹配參數(shù)類型。

可如果你這樣調(diào)用: fun(1, 1.0); 就會造成歧義,因為兩個可行函數(shù)(#2和#3)都有參數(shù)需要進(jìn)行類型轉(zhuǎn)換,編譯器不知道調(diào)用哪個“更好”。


3 回復(fù) 有任何疑惑可以回復(fù)我~
#1

GameDesigner_DaC 提問者

基本上明白了,辛苦了,謝謝!
2015-06-23 回復(fù) 有任何疑惑可以回復(fù)我~

重載的條件就是函數(shù)名相同,參數(shù)列表不同。

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
C++遠(yuǎn)征之離港篇
  • 參與學(xué)習(xí)       122681    人
  • 解答問題       488    個

C++掃清通往面向?qū)ο蟮淖詈笠坏勒系K,將所有知識點(diǎn)融會貫通

進(jìn)入課程

函數(shù)可以重載的條件

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號