基本元素
基础类型
“基础类型”的英文是 primitive type,很多资料将其翻译成“基本类型”,不过我们后面会发现,所有的 C++ 程序都是在这些类型的基础上实现的,因此我个人更倾向于译为“基础类型”。 |
如果说程序设计语言中最基础的概念是什么,我想应该就是类型,类型规定了其成员和可以对成员进行的操作,没有这一点,其他内容都无从谈起。
我们与计算机进行交互是为了处理数据,最常见的数据就是数值,而数值又有自然数和小数之分。C++ 也提供了两类对应的类型:整型和浮点型,它们统称为“算术类型”。其中,整型包含 int
,浮点型包含 float
和 double
,分别表示单精度浮点数和双精度浮点数,二者的区别我们稍候讨论。
如果只能够顺序地进行计算,那我们很难构造出有用的程序,毕竟我们的日常生活中也会面临诸多的决策。C++ 为此提供了 逻辑类型 bool
,这个类型只有两个值 true
和 false
,分别表示逻辑真和逻辑假。
算术类型和逻辑类型加上我们后面会讨论的运算符和控制流结构,已经是图灵完备的了。但是,我们还需要一个与计算机进行交互的界面。对人类来说,最自然的界面当然就是文字(在计算机发展的早期,这个界面是一组灯泡亮或不亮,或是打孔卡,想想每次都搞得跟情报站工作人员一样会有多痛苦)。C++ 提供了字符类型 char
,用以表示 ASCII 字符集中的文字
实际上 char 是可以进行算术运算的,但是因为 char 是 unsigned 还是 signed 是 implementation-defined 的行为,比较特殊,这里就先忽略。 |
类型修饰符
注意到我们还没有讨论过除了 bool
之外的类型的成员,这是因为需要加上本节的内容才能够讨论。
在如今典型的 64 位机器上 int
的位宽是 32-bit,能够表示十亿这个量级的数值,然而这有一些明显的局限:
如果我们只想存储很小的数值,而且不想浪费空间,该怎么办?
我们知道,当今的机器都是字节寻址的,如果我们想访问
int
中的一个字节,该怎么做?如果我们想要表示更大的值,该怎么办?
signed / unsigned / long
const / volatile
组合
组合数据
struct Pair {
int first;
int second;
};