基本元素

基础类型

“基础类型”的英文是 primitive type,很多资料将其翻译成“基本类型”,不过我们后面会发现,所有的 C++ 程序都是在这些类型的基础上实现的,因此我个人更倾向于译为“基础类型”。

如果说程序设计语言中最基础的概念是什么,我想应该就是类型,类型规定了其成员和可以对成员进行的操作,没有这一点,其他内容都无从谈起。

我们与计算机进行交互是为了处理数据,最常见的数据就是数值,而数值又有自然数和小数之分。C++ 也提供了两类对应的类型:整型浮点型,它们统称为“算术类型”。其中,整型包含 int,浮点型包含 floatdouble,分别表示单精度浮点数和双精度浮点数,二者的区别我们稍候讨论。

如果只能够顺序地进行计算,那我们很难构造出有用的程序,毕竟我们的日常生活中也会面临诸多的决策。C++ 为此提供了 逻辑类型 bool,这个类型只有两个值 truefalse,分别表示逻辑真和逻辑假。

算术类型和逻辑类型加上我们后面会讨论的运算符和控制流结构,已经是图灵完备的了。但是,我们还需要一个与计算机进行交互的界面。对人类来说,最自然的界面当然就是文字(在计算机发展的早期,这个界面是一组灯泡亮或不亮,或是打孔卡,想想每次都搞得跟情报站工作人员一样会有多痛苦)。C++ 提供了字符类型 char,用以表示 ASCII 字符集中的文字

实际上 char 是可以进行算术运算的,但是因为 charunsigned 还是 signed 是 implementation-defined 的行为,比较特殊,这里就先忽略。

类型修饰符

注意到我们还没有讨论过除了 bool 之外的类型的成员,这是因为需要加上本节的内容才能够讨论。

在如今典型的 64 位机器上 int 的位宽是 32-bit,能够表示十亿这个量级的数值,然而这有一些明显的局限:

  • 如果我们只想存储很小的数值,而且不想浪费空间,该怎么办?

  • 我们知道,当今的机器都是字节寻址的,如果我们想访问 int 中的一个字节,该怎么做?

  • 如果我们想要表示更大的值,该怎么办?

signed / unsigned / long

const / volatile

组合

组合数据

struct Pair {
  int first;
  int second;
};

运算符

控制流

组合类型

数组

指针和引用

抽象

参考

  • [1]