1)C++的類型轉換分為兩種,一種為隱式轉換,另一種為顯式轉換。
2)C++中應該盡量不要使用轉換,盡量使用顯式轉換來代替隱式轉換。
1隱式轉換
定義:隱式轉換是系統跟據程序的需要而自動轉換的。
1)C++類型(char,int,float,long,double等)的隱式轉換:
算術表達式隱式轉換順序為:
1、char - int - long - double
2、float - double
//1)算術表達式 int m = 10; double n = m;//n = 10.0;隱式把m轉為double類型 int m = 10; float f = 10.0; double d = m + f;//n = 20.0;隱式把m和f轉為double類型 //2)賦值 int *p = NULL; //NULL(0)隱式轉換為int*類型的空指針值 //3)函數入參 float add(float f); add(2); //2隱式轉換為float類型 //4)函數返回值 double minus(int a, int b) { return a - b; //返回值隱式轉換為double類型 }
2)C++類對象的隱式轉換:
void fun(CTest test); class CTest { public: CTest(int m = 0); } fun(20);//隱式轉換
2顯式轉換
定義:顯式轉換也叫強制轉換,是自己主動讓這個類型轉換成別的類型。
1)C++類型(char,int,float,long,double等)的顯式轉換:
int m = 5;
char c = (char)m;//顯式把m轉為char類型
double d = 2.0;
int i = 1;
i += static_cast<int>(d);//顯式把d轉換為int類型
2)C++類對象的顯式轉換:當類構造函數只有一個參數或除了第一個參數外其余參數都有默認值時,則此類有隱含的類型轉換操作符(隱式轉換),但有時隱式轉換並不是我們想要的,可在構造函數前加上關鍵字explicit,來指定顯式調用。
void fun(CTest test); class CTest { public: explicit CTest(int m = 0); } fun(20);//error 隱式轉換 fun(static_cast<CTest>(20)); //ok 顯式轉換