我不确定它是否早已被问过,但一定是我相信的。考虑简单的线的问题开始: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