簡短版參考:
我們知道c語言中的型別轉換只有一種:
type b =
(type)a;
而在c++語言中新增了四個關鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。
1.static_cast
double bv =
100.0
int i =
(int
)bv;
//c style, 0x64
int iv2 =
static_cast
<
int>
(bv)
;//0x64
int iv2 =
reinterpret_cast
<
int>
(bv)
;//error,
double bv =
100.0
;double
*pbv =
&bv;
int*iv1 =
(int
*)pbv;
//c style, right
int*iv2 =
static_cast
<
int*
>
(pbv)
;//error: invalid static_cast from type `double*' to type `int*'
int*iv2 =
reinterpret_cast
<
int*
>
(pbv)
;//right,
void
*piv1 =
(void
*)pbv;
void
*piv2 =
static_cast
<
void
*>
(pbv)
;int
*piv3 =
static_cast
<
int*
>
(piv2)
;//right
classa;
classb:
public a
;classc;
intmain()
2.const_cast
const
double a =7;
const
double
* p =
&a;double
* q =
const_cast
<
double
*>
(p);
*q =20;
//通過q寫值是未定義的行為
//c style
const
char const_char =
'a';
char
*pch =
&const_char;
//error: invalid conversion from `const char*' to `char*'
char
*pch =
(char*)
&const_char;
//right
*pch =
'c';
//c++style
const
char const_char =
'a';
char chv =
const_cast
<
char
>
(const_char)
;//error, invalid use of const_cast with type `char',
//which is not a pointer, reference, nor a pointer-to-data-member type
char
*chv =
const_cast
<
char
*>
(&const_char)
;//right
*chv=
'c';
3.reinterpret_cast
int lv =
100;
long
long llv =
100;
int*piv1 =
(int
*)lv;
//c style, do』not check size
int*piv2 =
reinterpret_cast
<
int*
>
(lv)
;//lv is treated as pointer
piv2 =
reinterpret_cast
<
int*
>
(llv)
;// warning, different size
4.dynamic_cast
dynamic_cast將乙個基類物件指標(或引用)cast到繼承類指標,dynamic_cast會根據基類指標是否真正指向繼承類指標來做相應處理, 即會作出一定的判斷。
若對指標進行dynamic_cast,失敗返回null,成功返回正常cast後的物件指標;若對引用進行dynamic_cast,失敗丟擲乙個異常,成功返回正常cast後的物件引用。
class
base
;class
derived
:public base ;
base* pb =
newbase()
;if(derived* pd =
static_cast
>
(pb)
)//下行轉換是不安全的(堅決抵制這種方法)
derived* pd =
newderived()
;if(base* pb =
static_cast
>
(pd)
)//上行轉換是安全的
#include
#include
using
namespace std;
// 我是父類
class
tfather};
// 我是子類
class
tson
:public tfather
int data;
// 我是子類獨有成員};
intmain()
總結:
轉換型別操作符
作用const_cast
去掉型別的const或volatile屬性
static_cast
無條件轉換,靜態型別轉換
dynamic_cast
有條件轉換,動態型別轉換,執行時檢查型別安全**換失敗返回null)
reinterpret_cast
僅重新解釋型別,但沒有進行二進位制的轉換
參考文章:
稍微總結一下
其實整個程式16日的時候應該已經搞得差不多,文件也已經比較詳細。但是由於這個禮拜又是筆試又是面試,所以都沒有時間review整個程式。今天看了一下,改了一些輸出檔案的位置,基本上完成了所有任務了。程式放在 http xiao 81 svn auto testing 下。其中包括三個可執行指令碼 1....
總結一下模板
二叉樹的各種操作 include include include includetypedef struct node tree void createbitree tree p 建樹 return void xpreorder tree p 輸出先序 void zpreorder tree p 輸...
隨便總結一下
資訊和人是主體也是核心。兩者需要進行測算。資訊是由頭,體,鍵,三部分構成。所謂頭,是題目,簡介,id,等,也就是乙個代表或者叫名,總之就是這樣類似的乙個東西。我不能把這種東西說的真正明白,因為其完全是代表性的,而代表性的不是自身,所以不能明確。體,是資訊的核心內容。這個不需要過多解釋。乙個人,不如說...