1. 程式人生 > >C++中四種類型轉換方式

C++中四種類型轉換方式

型別轉換有c風格的,當然還有c++風格的。c風格的轉換的格式很簡單(TYPE)EXPRESSION,但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把一個指向const物件的指標轉換成指向非const物件的指標,把一個指向基類物件的指標轉換成指向一個派生類物件的指標,這兩種轉換之間的差別是巨大的,但是傳統的c語言風格的型別轉換沒有區分這些。還有一個缺點就是,c風格的轉換不容易查詢,他由一個括號加上一個識別符號組成,而這樣的東西在c++程式裡一大堆。所以c++為了克服這些缺點,引進了4新的型別轉換操作符,他們是1.static_cast  2.const_cast  3.dynamic_cast  4.reinterpret_cast.

1.static_cast

最常用的型別轉換符,在正常狀況下的型別轉換,如把int轉換為float,如:int i;float f; f=(float)i;或者f=static_cast<float>(i);

2.const_cast

用於取出const屬性,把const型別的指標變為非const型別的指標,如:const int *fun(int x,int y){}  int *ptr=const_cast<int *>(fun(2.3))

3.dynamic_cast

該操作符用於執行時檢查該轉換是否型別安全,但只在多型型別時合法,即該類至少具有一個虛擬方法。dynamic_cast與static_cast具有相同的基本語法,dynamic_cast主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。

如:

class C

{
  //…C沒有虛擬函式
};
class T{
  //…
}
int main()
{
  dynamic_cast<T*> (new C);//錯誤
}
此時如改為以下則是合法的:
class C

{
public:
  virtual void m() {};// C現在是 多型
}

4.reinterpret_cast

interpret是解釋的意思,reinterpret即為重新解釋,此識別符號的意思即為資料的二進位制形式重新解釋,但是不改變其值。如:int i; char *ptr="hello freind!"; i=reinterpret_cast<int>(ptr);

這個轉換方式很少使用。

相關推薦

C++種類轉換方式

型別轉換有c風格的,當然還有c++風格的。c風格的轉換的格式很簡單(TYPE)EXPRESSION,但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把一個指向const物件的指標轉換成指向非const物件的指標,把一個指向基類物件的指標轉換成指向一

C++種類轉換以及const_cast是否能改變常量的問題

we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the n

c++種類轉換的區別

1、static_cast,支援子類指標到父類指標的轉換,並根據實際情況調整指標的值,反過來也支援,但會給出編譯警告,它作用最類似C風格的“強制轉換”,一般來說可認為它是安全的;2、dynamic_cast,支援子類指標到父類指標的轉換,並根據實際情況調整指標的值,和stat

C++總結之種類轉換方式(20160806)

型別轉換有c風格的,當然還有c++風格的。c風格的轉換的格式很簡單(TYPE)EXPRESSION,但是c風格的型別轉換有不少的缺點, 有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把一個指向const物件的指標轉換成指向非const物件的指標,

C++的種類轉換

C++中,四個與型別轉換相關的關鍵字:static_cast、const_cast、reinterpret_cast、dynamic_cast 一、 static_cast 特點:靜態轉換,在編譯處理期間。 應用場合:主要用於C++中內建的基本資料型別之間的轉換,如把in

C++4種類轉換

先看下c和cpp型別轉換的區別: C風格和函式風格的顯式轉換視情況由下面第一個匹配的C++風格顯式轉換構成: — a const_cast, — a static_cast, — a static_cast followed by a const_cast, — a rei

[c++基礎] 種類轉換和隱式型別轉換

static_cast<type-id >( expression )   用於數值型別之間的轉換,也可以用於指標之間的轉換,編譯時已經確定好,效率高,但須要自己保證其安全性。 (1)用於數值之間的轉化, 可以在相關指標在void* 之間轉換     (2)在

C#(int)、Conver.Toint32()、int.Parse()三種類轉換方式的區別與聯系--C#基礎知識

實例 文章 小數位 其他 返回 system roman static logs 自己也是剛學習C#程序設計語言,總結了一點知識點,想分享給大家。畢竟剛學習這門語言,學得不深,哪裏如果有錯誤,請幫個忙指出一下哈,謝謝! 1、(int)可用於單精度、雙精度等其他數值類型的轉

淺談C++種類轉換

轉換的含義是通過改變一個變數的型別為別的型別從而改變該變數的表示方式。為了型別轉換一個簡單物件為另一個物件你會使用傳統的型別轉換操作符。 型轉換有c風格的,當然還有c++風格的。c風格的轉換的格式很簡單(TYPE)EXPRESSION;例如將為了轉換一個型別為doubole

C++的4種類轉換方式

static_cast 靜態的_cast dynamic_cast 動態的_cast reinterpret_cast 重新解釋的 _cast const_cast 常量的_cast C++ 裡最好杜絕使用 C 方式的強制轉換, 換用以上 4 個. 我們通常用的是 static_cast 在一類東西都可以轉,

C++種類轉換

bin ++ 信息 {} pre 使用 屬性 四種 const 轉載:http://blog.csdn.net/bian_qing_quan11/article/details/70788312 1、 static_cast: 功能:完成編譯器認可的隱式類型轉換。 格式

C++ 種類轉換操作符

一、C風格型別轉換操作符 (type) expression 例子: int firstNumber, secondNumber; double result = ((double)firstNumber)/secondNumber; 二、C++型別轉換操作符 1.s

c++ 種類轉化方式

宣告:轉載出處:轉自此處 C風格的強制型別轉換(Type Cast)很簡單,不管什麼型別的轉換統統是:TYPE b = (TYPE)a,但是c 風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把一個指向co

C++ 種類轉換關鍵字介紹

C++有四種類型轉換關鍵字,分別是:             (1) . static_cast      (2)  const_cast   (3)  reinterpret_cast   (4) dynamic_cast 這四種類型轉換關鍵字分別使用在不同的情況下。下文

JS的種類識別方式

object 基本 null 引用 內置 cto 過程 regexp 不能 前言 JS中包含豐富的類型系統,在使用過程中,類型識別是重要的一環。JS提供了4種通用的類型檢測的方法   【typeof】【instanceof】【constructor】【Object.prot

C++的類轉換

actually new CA 對象的引用 如果 四種 表達式 clu 方式 在C++語言中,類型轉換分位兩種:隱式類型轉換 和 顯式類型轉換。 1. 隱式類型轉換 隱式轉換就是系統默認的、不需要加以聲明就可以進行的轉換。一般情

C++種強制轉換

一、簡介 C++中存在四種強制型別轉換,分別是static_cast 、const_cast 、 dynamic_cast 、reinterpret_cast 二、存在原因 我們直到在C語言中有強制型別轉換,可以轉換成合理的型別,那麼我們為什麼要在C+

理解C#語言的類轉換----初學者的理解,請大神指教

寫代碼 需要 con c# 初學 har 3.1 parse 範圍 一下都是在視頻教學中學到後的理解,如果說錯了請大神指教 C#語言中的類型轉換,就是將某個數據要轉換成另一個類型的數據。 c#語言中的數據類型主要有: char類型(字符類型); string類型(字符串類型

在CSS3,可以利用transform功能來實現文字或圖像的旋轉、縮放、傾斜、移動這種類的變形處理

for skew 文字 values alt 實例 垂直 -o 移動 CSS3中的變形處理(transform)屬 transform的功能分類 1.旋轉 transform:rotate(45deg); 該語句使div元素順時針旋轉45度。deg是CSS 3的“V

c#語言的類轉換

寫代碼 字符串 時間 編碼 3.1 表示 編寫 需要 string 類 在使用C#用語言編寫代碼的時候,經常要切換各種數據類型。這個時候就需要用到各種數字類型之間的切換。希望這篇隨筆可以有些幫助。 常用的數據類型轉換。例如,很多時候把用戶輸入的string 類