強制型別轉換的格式為:
cast-name(expression);
static_cast
任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast,例如:
int i,j;
double k=static_cast(j)/i;
當需要把乙個較大的算數型別轉換成乙個較小的算數型別時很有用,這意味著我們不在乎精度的損失
我們也可以用它來轉換指標,但是要保證指標的值不變,不然會產生未定義的錯誤
例如:
void* p=&d;
double *dp=static_cast(p);
注意:static_cast不會改變原變數的型別
const_cast 專門用於改變物件的底層const
例如:
const int *p;
int* q=const_cast(p); //由於物件本身是常量 所以不能用q向p寫值
//注意const_cast只能用於改變const屬性 不能用於改變型別
sring* q=const_cast(p) //報錯
const_cast也不能改變變數的原始型別
reinterpret_cast 通常為運算物件的位模式提供較低層次上的重新解釋,例如
int *p;
char *q=reinterpret_cast(p);
//q雖然顯式的是char指標 單實際上是int指標
strng str(q); //會導致異常的執行行為
怎樣檢查變數型別
#includeint a;
cout<<"a:"<強制型別轉換干擾了正常的型別檢查,我們在寫程式時,應該盡量避免使用強制型別轉換
C 命名型的強制型別轉換
舊式強制轉換符號有下列兩種形式 c 強制轉換符號 type expr c 語言強制轉換符號 type expr 如果我們希望自己的 在c 和c 語言中都能 夠編譯的話那麼只能使用c 語言的強制轉換符號 c 4種強制轉換 cast name pxpression static cast 最常用,類似c...
命名的強制型別轉換操作符
標準 c 為了加強型別轉換的可視性,引入命名的強制轉換操作符,為程式設計師在必須使用強制轉換時提供了更好的工具。命名的強制型別轉換符號的一般形式如下 cast name expression 其中 cast name 為 static cast dynamic cast const cast 和 r...
強制型別轉換
關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...