c語言的型別轉換分為隱式型別的轉換和強制型別的轉換。 隱式型別轉換:(適用於相近型別的轉換)
int main()
return 0;
}
int main()
因為c語言的隱式型別轉換坑很大,標準c++為了加強型別轉換的可視性,引入了四種命名的強制型別轉換操作符:
static_cast(相近型別的轉換)
static_cast用於靜態轉換,它對應的是c語言中的隱式型別轉換。編譯器隱式執行的任何型別轉換都可用static_cast,但是它不能用於兩個不相關的型別進行轉換。
void test1()
reinterpret_cast(不相關型別的轉換)
reinterpret_cast通常用於不相關型別的轉換。
void test2()
無關型別的轉換很強大,它還可以這樣(但是不建議使用):
typedef void(*func)();
int dosomething(int i)
void test3()
const_cast(去除const屬性的轉換)
const_cast最常用的用於刪除變數的const屬性,方便賦值。
void test4()
const_cast +reinterpret_cat---->等價於c語言中的強制型別轉換。
dynamic_cast
dynamic_cast只能用於多型,常用於將乙個父類物件的指標轉換為子類物件的指標或引用.
class a
};class b : public a
{};void fun(a* pa)
void test5()
需要注意的是:
dynamic_cast只能用於含有虛函式的類。
dynamic_cast會識別父類指標是指向父類,還是指向子類。
dynamic_cast會先檢查是否能轉換成功,能成功則轉換,不能則返回nullptr。
c語言的隱式型別轉化有些情況下可能會出問題;
顯式型別轉換將所有情況混合在一起,**不夠清晰。
C C 型別轉換
include include using namespace std int main 程式的執行結果如下 註解 int a 相當於將浮點數a的位址的前sizeof int 個位元組當成int型的資料輸出。float a 1.0f在記憶體中的表示是0x3f800000,當 int a強制轉換時,會...
C C 型別轉換
如果乙個int型的變數值為5,則若使用強制型別轉換或者使用memcpy,則相當於直接copy記憶體中的值,若列印,則會列印5對應的ascii值 而若使用函式轉換,則函式會操作記憶體轉為ascii值的5,若列印,則直接為5。memcpy在一定程度上相當於強制型別轉換,但是可以制定拷貝的位元組大小,因此...
C C指標的型別轉換
很多時候我們總是會將指標強制進行型別轉換,通過實驗和了解,總結一下規律,這裡記錄下來,方便以後自己使用 1 低位元組向高位元組轉換 比如 int float int型佔據4個位元組,但是float佔據8個位元組,起初你的資料是存放到4個位元組中的變數的,而後轉換成8位元組,讀取的時候會先讀取4位元組...