Android的Framework層源碼中有很多強制類型轉換函數的調用。寫慣了C代碼的人一般都習慣下面這種強制轉換方式:
double a = 89;
int b = (int)a;
但是,在C++代碼中,不推薦使用C這種(type-id)的強制轉換風格代碼,更推薦使用C++的標准類型轉換符:static_cast和dynamic_cast。
static_cast的函數原型如下:
static_cast(expression)
說明:
該運算符把expression轉換為type-id類型。
具體用法如下:
用於類層次結構中基類和子類之間指針或引用的轉換。向上轉型(把子類的指針或引用轉換成基類表示)是安全的;向下轉型(把基類指針或引用轉換成子類指針或引用)時,由於沒有動態類型檢查,所以是不安全的。 用於基本數據類型之間的轉換。 把void指針轉換成目標類型的指針。示例:
// 1. 類轉換
class Base {};
class Child : public Base {};
Child *a = new Child();
Base *b = static_cast
(a); // 2.基本類型轉換 int i = 5; double r = static_cast(i); // 3. void* 類型轉換 void *p = &i; int *s = static_cast(p);
dynamic_cast的函數原型如下:
dynamic_cast(expression)
說明:
該運算符把expression轉換成type-id類型的對象。type-id必須是類的指針、類的引用或者void *;如果type-id是類指針類型,那麼expression也必須是一個指針,如果type-id是一個引用,那麼expression也必須是一個引用。
備注:
由於在Android源碼中我沒有看到dynamic_cast的使用,所以這裡就不對dynamic_cast的使用做舉例了。