Unix/C/C++--强制类型转换详解
1 简介
当操作数的类型不同,而且不属于基本数据类型时,经常需要将操作数转化为所需要的类型,这个过程即为强制类型转换。强制类型转换具有两种形式:
- 显式强制转换
- 隐式强制类型转换。
2 C
2.1 两种转换形式
- 显式强制转换
char c = 'a';
int i = char(c);
- 隐式强制类型转换
char c = 'a';
int i = c;
2.2 自动转换规则
(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
(2)转换按数据长度增加的方向进行,以保证精度不降低。
(3)所有的浮点运算都是以双精度进行的。
(4)char型和short型参与运算时,必须先转换成int型。
(5)在赋值运算中,赋值号两边量的数据类型不同时, 赋值号右边量的类型将转换为左边量的类型。
3 C++
3.1 三种转换形式
- 显式强制转换
C++的强制类型转换看起来像函数调用,更加清晰
char c = 'a';
int i = (char)c; // C++风格
int i = char(c); // C风格,C++兼容
- 隐式强制类型转换(继承自C)
char c = 'a';
int i = c;
- static_cast、dynamic_cast、const_cast、reinterpret_cast
static_cast<new_type> (expression)
dynamic_cast<new_type> (expression)
const_cast<new_type> (expression)
reinterpret_cast<new_type> (expression)
c++强制转换注意事项
- 新式转换优先使用。一是新式转型易辨;二是编译器愈能诊断出错误的运用。
- 尽量少使用转型操作,尤其是dynamic_cast,耗时较高,会导致性能的下降,尽量使用其他方法替代。
4 示例
参考
1、Unix/C/C+±-数据类型转换、格式化、cpy、精度
2、《Effective C++》
3、百度百科–强制类型转换
4、图示C语言的基本数据类型内存变换
5、手把手教你c语言不同数据类型之间的转换
6、C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
7、百度百科–C语言类型强制转换
8、C++中static_cast和dynamic_cast强制类型转换
9、C++ 向上与向下类型转换(static_cast与dynamic_cast)
10、static_cast和dynamic_cast详解