最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++ 函數(shù)重載

2023-04-04 09:27 作者:S-a-i_  | 我要投稿

同一作用域內(nèi)的幾個函數(shù)名字相同但是形參列表不同的函數(shù)。

編譯器會根據(jù)實(shí)參類型推斷調(diào)用哪個函數(shù)。

注意:main函數(shù)不能重載。



定義重載函數(shù)

像這樣省略了形參的名字,實(shí)際上形參列表是相同的。


不允許兩個函數(shù)除了返回類型不同外其他所有要素相同。

錯誤!



重載和const形參

頂層const不影響傳入函數(shù)的對象,一個擁有頂層const的形參無法和另一個沒有頂層const的形參區(qū)分開來。

如果形參是某種類型的引用或指針,則通過區(qū)分指向的是常量對象還是非常量對象可以實(shí)現(xiàn)函數(shù)的重載,因為此時const是底層的

這是四個函數(shù)。因為const不能轉(zhuǎn)換成其他類型,所以我們只能把const對象傳遞給const形參,相反的,因為非常量可以轉(zhuǎn)換成const,所以上面四個函數(shù)都能作用于非常量對象或非常量對象的指針。當(dāng)我們傳遞一個非常量對象或非常量對象的指針時,編譯器會優(yōu)先選用非常量版本的函數(shù)。



const_cast和重載

前面我們提到過,const_cast在重載函數(shù)的情境中最有用。

這個函數(shù)的參數(shù)和返回類型都是const string的引用,我們可以對兩個非常量的string調(diào)用這個參數(shù),但返回的結(jié)果還是const string的引用,這時我們可以用一個新的函數(shù),如果實(shí)參不是常量時,得到的結(jié)果是一個普通的引用。

這個函數(shù)首先對實(shí)參強(qiáng)制轉(zhuǎn)換為了對const的引用,然后調(diào)用了shorterString函數(shù)的const版本,const版本返回對const string的引用,這個引用事實(shí)上綁定在了某個初始的非常量實(shí)參上,因此我們再將其轉(zhuǎn)換為一個普通的string&上。



調(diào)用重載函數(shù)

大多數(shù)情況下,我們使用實(shí)參去進(jìn)行函數(shù)匹配時非常的容易,但是有一些情況是比較棘手的,例如兩個重載函數(shù)參數(shù)數(shù)量相同且參數(shù)類型可以互相轉(zhuǎn)換時,我們后面就會介紹編譯器如何處理這些函數(shù)。

現(xiàn)在我們需要知道函數(shù)調(diào)用有三種結(jié)果:

1找到一個最佳匹配。

2找不到一個函數(shù)和實(shí)參匹配,也就是無匹配的錯誤。

3有多于一個函數(shù)可以匹配,但是都不是最佳匹配,此時將發(fā)出二義性調(diào)用的錯誤。



重載與作用域

一般來說將函數(shù)聲明寫在局部作用域內(nèi)不是一個好的選擇。
其實(shí)重載對作用域的一般性質(zhì)沒有什么改變,如果我們在內(nèi)層作用域中聲明名字,他將隱藏外層作用域中的同名實(shí)體,在不同作用域中無法重載函數(shù)名。

因為fooBar內(nèi)聲明了print(int),隱藏了之前的print函數(shù),因此只有函數(shù)內(nèi)定義的這個print可用。當(dāng)我們調(diào)用print函數(shù)時,編譯器首先尋找對函數(shù)名的聲明,找到的是接受int值的局部生命,一旦作用域中找到了所需名字,編譯器就會忽略外層作用域中的實(shí)體名字,只檢查是否能和作用域中的參數(shù)是否匹配。

所以名字查找在類型匹配之前發(fā)生。

如果我們把int參數(shù)的print定義在作用域外,那么fooBar將不會再屏蔽其他的print。

C++ 函數(shù)重載的評論 (共 條)

分享到微博請遵守國家法律
额济纳旗| 洪洞县| 浦江县| 阿拉善右旗| 扬中市| 嵊泗县| 六安市| 怀仁县| 邵阳县| 汉阴县| 大洼县| 张家口市| 仁布县| 应城市| 荥经县| 天门市| 吴忠市| 阜南县| 南丰县| 开阳县| 竹山县| 云阳县| 六安市| 浦北县| 荔浦县| 都兰县| 伊通| 忻州市| 亳州市| 秦安县| 南陵县| 仲巴县| 淳化县| 宁陕县| 明光市| 哈巴河县| 同德县| 锦州市| 贵德县| 郴州市| 永善县|