我不確定它是否早已被問過,但一定是我相信的。考慮簡單的線的問題開始:static_cast如何將一個int轉換爲char而不是reinterpret_cast?
int a ;
char b = reinterpret_cast<char> (a);
我明白reinterpret_cast
解釋X型的位模式爲鍵入y,ofcouse它不應該工作,由於大小不匹配,實際上並非如此。
現在考慮這個另一個代碼:
int a ;
char b = static_cast<char> (a);
這工作! 。現在我的問題是它如何工作?我的意思是編譯器切掉了這些位? 。我確定sizeof(char) < sizeof(int)
。如果那樣,reinterpret_cast
也應該使用相同的技術?
*「... and'reinterpret_cast' does not that」*。該規範的哪一部分說明了這一點? – Nawaz 2013-02-17 17:56:01
@Nawaz,明確地定義'reinterpret_cast'允許的轉換的部分,你期望它在哪裏說出來? [expr.reinterpret.cast]「可以使用'reinterpret_cast'明確執行的轉換如下所示:**否 其他轉換可以使用'reinterpret_cast'明確執行**」 – 2013-02-17 18:00:50
儘管名稱看似廣泛, reinterpret_cast'是相當有限的。正如@JonathanWakely所指出的那樣,它可以做的事情列表(基本上涉及指針和引用的事情),並且不允許任何其他事情。 5.2.10 [expr.reinterpret.cast]。完全不像C風格演員...... – 2013-02-17 22:36:29