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

标签 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也应该通过相同的技术工作吗?

最佳答案

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

关于c++ - static_cast 如何将 int 转换为 char 而不是 reinterpret_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14924067/

相关文章:

c++ - 我需要修改用于对角线边缘检测的 Sobel 内核。 OpenCV 和 C++

c++ - Memcpy int 到 char 缓冲区 - 作为 sprintf 的替代

java - 使用 DatatypeConverter.parseHexBinary() 时出现 NullPointerException

Java将 double 型转换为日期格式

c++ - 简单的反射机制

python - 是否可以将 C++ 小部件嵌入到 PyQt 应用程序中?

c++ - 在 C++ 中访问列表列表的元素

excel - 意外的 CDate() 行为

ruby - 确保 Ruby 将数字视为小数而不是 float

MySQL 不将字符串转换为 int,尽管进行了转换