程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中static_cast, dynamic_cast用法

C++中static_cast, dynamic_cast用法

編輯:C++入門知識

C++中static_cast, dynamic_cast用法


前言

Android的Framework層源碼中有很多強制類型轉換函數的調用。寫慣了C代碼的人一般都習慣下面這種強制轉換方式:

double a = 89;
int b = (int)a;

但是,在C++代碼中,不推薦使用C這種(type-id)的強制轉換風格代碼,更推薦使用C++的標准類型轉換符:static_cast和dynamic_cast。


static_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的函數原型如下

dynamic_cast(expression)

說明
該運算符把expression轉換成type-id類型的對象。type-id必須是類的指針、類的引用或者void *;如果type-id是類指針類型,那麼expression也必須是一個指針,如果type-id是一個引用,那麼expression也必須是一個引用。

備注

由於在Android源碼中我沒有看到dynamic_cast的使用,所以這裡就不對dynamic_cast的使用做舉例了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved