命名的強制型別轉換

2021-09-19 01:40:21 字數 940 閱讀 7966

強制型別轉換的格式為:

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...