型別轉換
static_cast
這個就是c語言的隱式轉換
reinterpret_cast
這個就是任意型別的轉換,但是不能忽略 cv限定符
const_cast
這個只能去掉頂層const 和 volatile , 並且必須原始物件是 非const物件才有效,如果原始物件是const 物件,那麼經過const_cast 去掉 const 後,修改物件會發生未定義行為。
dynamic_cast
dynamic_cast (exp)
dynamic_cast 常用於多型之間的指標或引用的轉換。如果用於非多型類之間的轉換會報編譯錯誤,它用於執行期的型別轉換。可使用的轉化如下
非 const 型別的指標或引用 轉化為 const 型別的指標或引用
賦值相容規則之間的轉換(要求 base 是dervied 的唯一public 許可權基類), 這個 static_cast 同樣可以做到
多型類的指標/引用的轉換。這裡分為上行和下行轉換和void*轉換。、
void*
若 表示式 是指向多型型別的指標,且 新型別 是到 void 的指標,則結果是指向 表示式 所指向或引用的最終派生物件的指標。
下行轉換
dynamic(exp)
從基類轉換到派生型別
1.若 exp 指向最終的派生類物件,且在該物件的繼承鏈中,exp 是 new_type 的public 基類,且只有new_type 派生了 exp 指向物件的型別,那麼轉換 new_type 成功
struct base ;
struct dervied : public base;
struct dervied2 ;
struct finaldervied : public derived, public dervied2 ;
base* b = new finalderived();
dervied2* d2 = dynmaic_cast(b); // success
側向轉化
dynamic < derviedtype > (exp)
exp 指向物件的型別是 最終派生型別的public 基類,且 derviedtype 的基類 與 最終派生類中的其他 derviedtype 無歧義基類,那麼可以轉化。從下面**看 base 和 base2 沒有相關聯的關係,但是通過dynamic_cast 的 sidecast 可以發生轉換
#include struct base
};struct base2
};struct base3 : public base ;
struct dervied : public base2, public base3 ;
int main()
return 0;
}
**#include struct v ; // 必須為多型以使用執行時檢查的 dynamic_cast
};struct a : virtual v {};
struct b : virtual v
};struct d : a, b };
struct base };
struct derived: base };
int main()
base* b2 = new derived;
if(derived* d = dynamic_cast(b2))
base* b3 = new derived;
if(const base* b = dynamic_cast(b3))
delete b1;
delete b2;
delete b3;
return 0;
}
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...
C 型別轉換
在程式中,進行型別轉換是常見的事。那麼在 c 中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如 object objtest new newtype newtype newvalue newtype objtest 但是這樣轉換,有個嚴重的問題,就是在把 objtest 強轉換成 newt...
C 型別轉換
型別轉換是將一種型別的值對映為另一種型別的值。型別轉換實際上包含有自動隱含和強制的兩種。型別的自動隱式轉換 c 語言編譯系統提供的內部資料型別的自動隱式轉換規則如下 1.程式在執行算術運算時,低型別可以轉換為高型別。2.在賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給它。3.當在...