我的問題是爲什麼自動類型轉換在C++中調用重載函數時不起作用。示例代碼如下:C++函數過載不明確,沒有自動類型轉換
void test(char t);
void test(short t);
void test(long long t);
void main(){
int a=8;
test(a);
}
如果我編譯上面的代碼使用g ++ /鐺++,函數重載模棱兩可的誤差將出現在
試驗(a)
爲什麼不編譯器在此應用自動類型轉換規則?可變在功能主()是INT類型應交談成型一個長長避免精度損失。 我不想編寫類型爲int或long的重複函數。當然,我可以避開下面顯式轉換錯誤:
測試((加長)一)
但是,我必須每次我需要調用測試時間(使用顯式強制long long) int或long類型的參數?有什麼方法讓編譯器更加智能?
謝謝你的答案。
謝謝您的回答。我閱讀鏈接,它說數字轉換的自動類型轉換是從較窄的到更寬的,以避免精度的損失,對吧?在我的例子中,char和short比int小,所以int不應該隱式地轉換爲int,但是int可以長時間隱式轉換,因爲long long比int寬。當隱式地將int轉換爲char或short時,會導致精度損失。劑量編譯器是否認爲int可以隱式轉換爲我所有的三種類型(char,short,long long)? – user3475622
不知道,但據我所知,所有編譯器都以這種方式運行。在我看來 - 顯式比隱式更好。 –
如果你真的需要實現你的目標,請看我編輯的答案。 –