簡體   English   中英

static_cast如何將int轉換為char而不是reinterpret_cast?

[英]How can static_cast can cast an int to char but not reinterpret_cast?

我不確定之前是否曾被問過,但一定是我相信的。 考慮問題開始的簡單路線:

int a ;
char b = reinterpret_cast<char> (a);

我理解reinterpret_cast將類型x的位模式解釋為類型y,因為大小不匹配它不應該工作,實際上它不會。

現在考慮另一個代碼:

int a ;
char b = static_cast<char> (a);

這有效! 現在我的問題是它是如何工作的? 我的意思是編譯器會切掉這些位嗎? 我確定sizeof(char) < sizeof(int) 如果是這樣, reinterpret_cast也應該采用相同的技術?

有一個明確定義的從intchar轉換; 這就是static_cast作用。 事實上,你不需要演員; 你可以在這里使用作業。 另一方面, reinterpret_cast表示假裝一種類型的對象中的位代表另一種類型的對象; 對於某些類型可以(或多或少),但沒有明智的方法假裝int中的位可以用作char中的位而不應用轉換, reinterpret_cast不會這樣做。

static_cast可以強制定義轉換發生,也可以反轉定義的轉換(除了添加或刪除const / volatile)。 你認為reinterpret_cast是一些可以做任何事情的超級演員。 事實並非如此。 它有一組定義的轉換。

它可以將一種類型的指針轉​​換為另一種指針(只要保留const / volatile)。 它同樣可以用於參考。 它可以將指針轉換為整數類型,反之亦然。

除此之外,它沒有做任何事情,你的程序也沒有很好的形成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM