摘要
类型不仅规定一个数据占多少字节,还规定它的位如何解读:同一个字节,对 char 来说是字母“A”,对 int 来说是数 65。本课用字符和布尔值补全基本类型,并研究从一种类型到另一种类型的过渡:隐式转换,即编译器不经要求就进行、并且可能丢失信息的转换;用 static_cast 进行的显式转换;以及拒绝信息丢失的花括号初始化。最后讲常量 const 和 constexpr,它们把一种意图(“这个值不变”)变成编译器加以核查的保证;还有字面量和 auto,它们决定源代码中写出的值是什么类型。
学习目标
- 利用字符的数值编码进行计算,例如求出作为字符读入的数字的值。
- 预测整数、实数和布尔值之间隐式转换的结果,并用
static_cast写出显式转换。 - 解释花括号初始化为什么拒绝丢失信息的转换,以及 GCC 在每种情况下怎样处理。
- 用
const或constexpr声明每一个不应改变的值,并区分这两个关键字。 - 推断字面量(
5、5u、5.0、5.0f、'5'、"5")的类型,以及auto赋予它的类型。
类型即解读方式
变量与内存一课把变量介绍为一个有名字、类型和值的存储单元;整数及其表示和浮点数两课则表明,存储单元里装的不是数而是位,类型说明如何解读它们。本课把这个想法推到它的结论:既然类型是解读的规则,那么同样的位按不同的类型去读,就意味着不同的东西;而把一个值从一种类型变到另一种类型,在 C++ 中称为类型转换,就是更换规则。有些转换保留值(整数 7 变成实数 7.0,什么也不丢失);另一些则改变值(实数 2.7 变成整数 2)。由此引出贯穿本课的问题:每次转换时,值是否保留?由谁来核查?
正在加载内容…
已完成
登录账户以保存您的进度