章节目录

第10章总结

本节阅读量:

标准转换规则相当复杂 —— 如果您不理解每个细微差别,请不要担心,实际使用时再详细研究即可。


章节回顾

将值从一种数据类型转换为另一种数据类型的过程称为类型转换。

只要需要一种数据类型,但却提供了不同的数据类型,就执行隐式类型转换(也称为自动类型转换)。如果编译器能够找出如何在这两种类型之间进行转换,就可以编译成功。如果它不知道如何操作,那么会出现编译错误。

C++语言在其基本类型之间定义了许多内置转换(以及一些用于更高级类型的转换),称为标准转换。这些包括数值提升、数值转换和算术转换。

数值提升是将某些较小的数值类型转换为某些较大的数值类型(通常为int或double),以便CPU可以对与处理器的自然数据大小匹配的数据进行操作。数值提升包括整形提升和浮点提升。数值提升是保值的,这意味着不会损失数字或精度。并非所有扩大的转换都是提升。

数值转换是不是数值提升的基本类型之间的类型转换。窄化转换可能会导致值或精度丢失。

在C++中,某些二进制运算符要求其操作数具有相同的类型。如果提供了不同类型的操作数,则使用一组称为常用算术转换的规则将其中一个或两个操作数隐式转换为匹配类型。

当程序员通过强制转换显式请求转换时,执行显式类型转换。C++支持5种类型的显示转换:C样式转换、静态转换、常量转换、动态转换和重解释转换。通常,应避免C样式转换、常量转换和重解释转换。static_cast用于将值从一种类型转换为另一种类型的值,并且是迄今为止C++中使用最多的转换。

Typedef和类型别名允许程序员为数据类型创建别名。这些别名不是新类型,其行为与被别名的类型相同。Typedef和类型别名不提供任何的类型安全,需要注意不要假设别名与被别名的类型不同。

auto关键字有许多用法。首先,auto可以用于进行类型推导,这将从变量的初始值设定项中推导变量的类型。类型推导会删除常量和引用限定符,因此如果需要,请确保将它们显示添加。

Auto也可以用作函数返回类型,以使编译器从函数的return语句推导函数的返回类型,对于普通函数应该避免这种情况。Auto也用作尾部返回语法的一部分。


10.8 函数的类型推导

上一节

11.0 函数重载简介

下一节