static_cast如何将int转换为char而不是reinterpret_cast?

时间:2013-02-17 17:46:51

标签: c++ type-conversion

我不确定之前是否曾被问过,但一定是我相信的。考虑问题开始的简单路线:

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也应该采用相同的技术?

2 个答案:

答案 0 :(得分:6)

intchar有明确定义的转换;这就是static_cast的作用。事实上,你不需要演员;你可以在这里使用作业。另一方面,reinterpret_cast表示假装一种类型的对象中的位代表另一种类型的对象;对于某些类型可以(或多或少),但没有明智的方法假装int中的位可以用作char中的位而不应用转换,reinterpret_cast不会这样做。

答案 1 :(得分:3)

static_cast可以强制定义转换发生,也可以反转定义的转换(除了添加或删除const / volatile)。你认为reinterpret_cast是一些可以做任何事情的超级演员。事实并非如此。它有一组定义的转换。

它可以将一种类型的指针转​​换为另一种指针(只要保留const / volatile)。它同样可以用于参考。它可以将指针转换为整数类型,反之亦然。

除此之外,它没有做任何事情而且你的程序格式不正确。