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

M3t*_*0it 6 c++ type-conversion

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

int a ;
char b = reinterpret_cast<char> (a);
Run Code Online (Sandbox Code Playgroud)

我理解reinterpret_cast将类型x的位模式解释为类型y,因为大小不匹配它不应该工作,实际上它不会.

现在考虑另一个代码:

int a ;
char b = static_cast<char> (a);
Run Code Online (Sandbox Code Playgroud)

这有效!.现在我的问题是它是如何工作的?我的意思是编译器会切掉这些位吗?.我确定sizeof(char) < sizeof(int).如果那样,reinterpret_cast还应该采用相同的技术吗?

Pet*_*ker 6

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

  • @Nawaz,定义`reinterpret_cast`允许的转换的部分,显然,你希望它在哪里说出来?[expr.reinterpret.cast]"下面列出了可以使用`reinterpret_cast`显式执行的转换.**使用`reinterpret_cast`不能显式执行其他转换.**" (4认同)

小智 5

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

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

除此之外,它不执行任何操作,并且您的程序格式不正确。