【C++自我精講】基礎系列五 隱式轉換和顯示轉換

【C++自我精講】基礎系列五 隱式轉換和顯示轉換
0 前言

 1)C++的類型轉換分爲兩種,一種爲隱式轉換,另外一種爲顯式轉換。函數

 2)C++中應該儘可能不要使用轉換,儘可能使用顯式轉換來代替隱式轉換。spa

1 隱式轉換

定義:隱式轉換是系統跟據程序的須要而自動轉換的。指針

1)C++類型(char,int,float,long,double等)的隱式轉換:code

     算術表達式隱式轉換順序爲:對象

     一、char - int - long - doubleblog

     二、float - doubleci

//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++類對象的隱式轉換:it

void fun(CTest test); 

class CTest 
{ 
public: 
    CTest(int m = 0); 
} 
fun(20);//隱式轉換
2 顯式轉換

定義:顯式轉換也叫強制轉換,是本身主動讓這個類型轉換成別的類型。ast

1)C++類型(char,int,float,long,double等)的顯式轉換:class

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 顯式轉換
相關文章
相關標籤/搜索