c++ 是一門強型別語言(相比c++來說c語言是弱型別語言),不同自定義型別之間的轉換必須進行顯式轉換。(c++中也有隱式型別轉換,所以關於c++到底是強型別語言還是弱型別語言是乙個比較尷尬的問題。)
c++ 中提供了四種轉換操作符來細分顯式型別轉換。因為是操作符,所以他們不屬於任何的namespace,也就不用包含任何標頭檔案就可以使用。
static_cast
(expression)
const_cast
(expression)
reinterpret_cast
(expression)
dynamic_cast
(expression)
static_cast能進行基礎型別之間的轉換,也是最常看到的型別轉換。它主要有如下幾種用法:
注意:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。
該運算子用來修改型別的const或volatile屬性。除了去掉const 或volatile修飾之外, type_id和expression得到的型別是一樣的。
注意:const_cast只能改變運算物件的底層const。對於常量物件,使用const_cast會報錯。
const
char *pc;
char *p = const_cast
(pc); //正確
reinterpret_cast它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,在把該整數轉換成原型別的指標,還可以得到原先的指標值)。
int *ip;
char *pc = reinterpret_cast
(ip);
上述的轉化過程非常危險,因為一旦在後面的程式中忘記的pc指標指向的是乙個int型的資料,對其操作就回引起資料混亂的現象。
注意: reinterpret_cast 很少使用,因為在reinterpret_cast本質上依賴於機器,要想使用reinterpret_cast必須涉及的型別和編譯器實現轉換的過程都非常了解。
dynamic_cast 主要用在繼承體系中的安全向下轉型。它能安全地將指向基類的指標轉型為指向子類的指標或引用,並獲知轉型動作成功是否。轉型失敗會返回null**型物件為指標時)或丟擲異常**型物件為引用時)。
dynamic_cast 會動用執行時資訊(rtti)來進行型別安全檢查,因此 dynamic_cast 存在一定的效率損失。
注意: dynamic_cast 只有在基類帶有虛函式的情況下才允許將基類轉換為子類。
C 四大型別轉換
c語言的型別轉換比較自由,但也帶來了一些問題,這些問題大多由程式設計師自行控制和解決。對於龐大的c 語言機制而言,這種簡單粗暴的型別轉換方式顯然是個巨大的負擔,因此c 引入4種型別轉換運算子,更加嚴格的限制允許的型別轉換,使轉換過程更加規範 dynamic cast 用於多型型別的轉換 static...
NoSQL的四大型別
1 鍵值資料庫 應用 內容快取 優點 擴充套件性好 靈活性好 大量寫操作時效能高 缺點 無法儲存結構化資訊 條件查詢效率較低 2 列族資料庫 應用 分布式資料儲存與管理 優點 查詢速度快 可擴充套件性強 容易進行分布式擴充套件 複雜性低 使用者 ebay cassandra instagram ca...
資料庫操作四大型別
資料庫操作四大型別 1資料 查詢 dql 語言 基本構成 select from where 這些語句構成 2資料 操縱 dml 語言 基本構成 insert update delete 3資料 定義 ddl 語言 基本構成 create table view 表的建立 屬性定義 4資料 控制 dc...