- 21天学通C++(第5版)
- 刘蕾
- 922字
- 2020-08-27 17:15:48
2.4 类型转换
类型转换是用来把一个类型的值转换成另一个类型。C++是强类型的语言,即其每一个值都有它相应的类型。当用户需要把一个值转换为另一个类型时,就需要使用一些方式进行类型转换。C++支持隐式转换和显式转换两种转换方式。
2.4.1 隐式转换
隐式转换就是系统默认的,不需要加以声明就可以进行的转换。在隐式转换过程中,编译器无须对转换进行详细检查就能够安全地执行转换。比如从int类型转换到long类型就是一种隐式转换。隐式转换一般不会失败,转换过程中也不会导致信息丢失。
【范例2-8】隐式转换的实现。该范例实现数据类型的隐式转换,将字符型变量转换为整型变量,实现代码如代码清单2-8所示。
代码清单2-8
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt003_43.jpg?sign=1738927066-IKuLOwEuNw7wTwXfFehHdX5ENVKrFUnZ-0-76eeb8232aebbfb83384844ec4a6a50b)
【运行结果】在Visual C++中创建一个【C++ Source File】,将上述代码输入其中,输出结果如图2-13所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt003_45.jpg?sign=1738927066-vdnXzNqdYUIwfmfrhJEHyfmNVhp2QKCs-0-069f286b08cd4f2f7cd5011bb43eee64)
图2-13 隐式转换
【范例解析】在范例2-8程序中,声明了一个字符型变量ch和一个整型变量i,并在声明变量i的同时给其赋初值ch的值,此处就需要将字符型的值转换为整型值,Visual C++编译器自动实现了其之间的转换,称为隐式转换。
提示
图2-13中输出整型变量i的值为97,这是因为字母a对应的ASCII码值为97。由此可看出,字符型和整型数据类型之间可以相互转换。
2.4.2 显式转换
通常,隐式转换意味着编译器认为转换是合理的或者是安全的。此外,C++还支持显式转换,显式转换是用户手动指出需要转换的类型。显式转换意味着编译器能够找到一个转换方式,但是它不保证这个转换是否安全,所以需要程序员额外指出。
C++的显式转换提供了更精确的语义并有对其进一步扩展的可能。在C++语言中,读者可以用一个简单的int来完成2.4.1节中字符型到整型的转换。
【范例2-9】显式转换的实现。该范例实现了数据类型之间的显式转换,将字符型变量通过()符显式转换为整型变量,实现代码如代码清单2-9所示。
代码清单2-9
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt003_46.jpg?sign=1738927066-vzpfNhDcGVMH74FO8hWKuUaBmgS5lZER-0-b2811e9da8059865765cf00d076dbe39)
【运行结果】在Visual C++中创建一个【C++ Source File】,将上述代码输入其中,输出结果如图2-14所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt003_47.jpg?sign=1738927066-4qDNjjbkUWEVelQWp5kkXDC3tfEwxhgw-0-c76e0bf8a8f8362cdf55573887ec1f46)
图2-14 显式转换
【范例解析】在范例2-9代码中,使用了语句“i=(int)ch;”将字符型变量ch的类型强制转换为整型,因此,其运行后的效果与图2-13所示相同。事实上,C++为显式类型转换提供了四种不同的操作符:static_case、dynamic_cast、const_cast、reinterpret_cast。
注意
C++的显式转换通过区分各种转换情况来增加安全性:通过const_cast来取消const、volatile之类的修饰;通过static_cast来做相关类型的转换;通过reinterpret_cast来做低级的转换等。