C++中隱式轉換和顯示轉換

轉自:http://www.cnblogs.com/joinclear/p/3850076.html


0前言

 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 顯式轉換

發佈了62 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章