我不确定之前是否曾被问过,但一定是我相信的。考虑问题开始的简单路线:
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
也应该采用相同的技术?
答案 0 :(得分:6)
从int
到char
有明确定义的转换;这就是static_cast
的作用。事实上,你不需要演员;你可以在这里使用作业。另一方面,reinterpret_cast
表示假装一种类型的对象中的位代表另一种类型的对象;对于某些类型可以(或多或少),但没有明智的方法假装int中的位可以用作char中的位而不应用转换,reinterpret_cast
不会这样做。
答案 1 :(得分:3)
static_cast可以强制定义转换发生,也可以反转定义的转换(除了添加或删除const / volatile)。你认为reinterpret_cast是一些可以做任何事情的超级演员。事实并非如此。它有一组定义的转换。
它可以将一种类型的指针转换为另一种指针(只要保留const / volatile)。它同样可以用于参考。它可以将指针转换为整数类型,反之亦然。
除此之外,它没有做任何事情而且你的程序格式不正确。