1. 程式人生 > >【C++】C++函式過載過程中的二義性和型別轉換

【C++】C++函式過載過程中的二義性和型別轉換

例如函式形參的型別是int,呼叫函式時卻將short型別的資料交給了它,編譯器就需要先將short型別轉換為int型別才能匹配成功。

注意,型別提升和型別轉換不是一碼事!型別提升是積極的,是為了更加高效地利用計算機硬體,不會導致資料丟失或精度降低;而型別轉換是不得已而為之,不能保證資料的正確性,也不能保證應有的精度。

函式過載二義性錯誤程式碼示例:

#include <iostream>
using namespace std;

void func(int, int);  //①
void func(char, int, float);  //②
void func(char, long, double);  //③

int main() {
	short n = 99;
	func('@', n, 99);
	func('@', n, 99.5);        //二義性錯誤
	getchar();
	return 0;
}

VS提示:

error C2666: “func”: 2 個過載有相似的轉換