有的時(shí)候你想直接寫(xiě)一個(gè)對(duì)象,然后讓它自己按照兼容類(lèi)型輸出,這時(shí)候C++采用什么機(jī)制?編譯器會(huì)來(lái)查找你的類(lèi)中是否有類(lèi)型轉(zhuǎn)換函數(shù),進(jìn)一步查找是否有合適的類(lèi)型轉(zhuǎn)換函數(shù),然后才自動(dòng)進(jìn)行轉(zhuǎn)換。
就算是你把一個(gè)類(lèi)對(duì)象直接賦值給一個(gè)兼容類(lèi)型的變量也是要調(diào)用類(lèi)型轉(zhuǎn)換函數(shù)的,請(qǐng)看下圖:

我把類(lèi)型轉(zhuǎn)換函數(shù)都注釋掉了,這說(shuō)明base類(lèi)中已經(jīng)沒(méi)有類(lèi)型轉(zhuǎn)換函數(shù)了。


由上圖可知轉(zhuǎn)換失敗了。
現(xiàn)在我把double轉(zhuǎn)換函數(shù)的注釋去掉。


可以看出轉(zhuǎn)換成功了。
現(xiàn)在我再去掉一個(gè)類(lèi)型轉(zhuǎn)換函數(shù)的注釋?zhuān)?duì)原函數(shù)稍作修改。



由此可見(jiàn)它選擇的是最優(yōu)的轉(zhuǎn)換,由此可知如果沒(méi)有最優(yōu)的轉(zhuǎn)換它就只能退而求其次了?,F(xiàn)在我把double那個(gè)轉(zhuǎn)換函數(shù)再注釋掉把其他三個(gè)轉(zhuǎn)換函數(shù)的注釋去掉。


這驗(yàn)證了我的說(shuō)法。