- 开篇第一句话足见作者的高屋建瓴:类型决定程序中数据和操作的意义。随后列举了简单语句
的意义取决于i和j的类型。若它们都是整形,则为通常的算术意义。若它们都为字符串型,则为进行拼接操作。若为用户自定义的class类型,则…i = i + j;
- C++中的基本类型(primitive)有很多,但主要分为两类:arithmetic types和void。而arithmetic types也分成两类:integral types和floating-point types。
- 类型long long是C++11的新特性。
- 通常float-point type中,各个类型的表示大小:float用一个word,double用两个word,而long double用三或四个word。
- 算术计算时不要使用char,因为char在一些机器上表示为signed char,而在另外一些机器上用unsigned char表示。
- 避免未定义和依赖具体实现的行为:
- 将该type能够表示的数据范围之外的value赋值给该type时,会根据signed/unsigned进行反应:
- 关于转义序列的泛化:
- 关于变量(对象)的初始化和赋值:是的,比较对于自定义的类而言,赋值调用的是拷贝构造
copy constructor
,而赋值调用的是operator=
。 - 内置类型和class类型没有(显式)初始化的后果:
- C++中变量(对象)必须先declaration后使用的原因是C++是一门静态类型语言,在编译阶段会进行(静态)类型检查。
- scope的阐述:
- 引用(reference)必须初始化:
- 引用不是对象,而是已存在对象的别名:
- reference 和 pointer:
void *
指针:
似乎void *
指针是个万金油,但是- 关于复合类型(compound type) 的良好定义方式:
- 指针引用(reference to pointers)和指向引用的指针(pointer to a reference): 因为引用不是对象,它仅是已经存在对象的别名。所以指向引用的指针是语法错误。然而指针是一个对象,所以我们可以定义指针引用: