casting int to char using C++ style casting
本问题已经有最佳答案,请猛点这里访问。
在传统的C语言中,您可以做到:
1 2 3 4 | int i = 48; char c = (char)i; //Now c holds the value of 48. //(Of course if i > 255 then c will not hold the same value as i). |
C++中的哪种方法(StasyQuestCase,RealType CAST)适合于完成这项工作?
您应该使用
除非您想将一个类型转换成一个根本不同的类型,否则几乎不应该使用
另外,
有关C++铸件的更多信息,请参见:
- 什么时候应该使用静态u cast、动态u cast、const u cast和reinterpret u cast?
- http://www.cplusplus.com/doc/tutorial/typecasting/。
您可以在数值类型之间隐式转换,即使这样会降低精度:
1 | char c = i; |
但是,您可能希望启用编译器警告以避免这样可能的有损转换。如果是这样,则使用
其他演员:
dynamic_cast 只适用于指针或对多态类类型的引用;const_cast 不能改变类型,只有const 或volatile 限定符;reinterpret_cast 用于特殊情况,在指针或引用和完全无关的类型之间转换。具体来说,它不会进行数值转换。- C样式和功能样式的强制转换可以执行
static_cast 、const_cast 和reinterpret_cast 的任何组合以完成任务。
埃多克斯1〔15〕
该部分未列出此转换。即使这是无效的:
1 | long l = reinterpret_cast<long>(i) |
。
使用静态强制转换可能会导致如下结果:
1 2 3 4 5 | // This does not prevent a possible type overflow const char char_max = -1; int i = 48; char c = (i & char_max); |
号
要防止可能的类型溢出,可以执行以下操作:
1 2 3 4 | const char char_max = (char)(((unsigned char) char(-1)) / 2); int i = 128; char c = (i & char_max); // Would always result in positive signed values. |
如果重新解释,那么Cast可能会直接转换为char,而没有任何Cast安全性。->如果你也可以使用静态模式,就不要使用reinterpret-cast。如果在类之间进行强制转换,静态强制转换还将确保两种类型匹配(对象是强制转换类型的派生)。
如果您的对象是一个多态类型,而您不知道它是哪个类型,那么您应该使用动态类型转换,动态类型转换将在运行时执行类型检查,如果类型不匹配,则返回nullptr。
如果您需要const-cast,那么您很可能做了一些错误的事情,应该考虑可能的替代方法来修复代码中的const正确性。