基本内置类型
-
C++ 定义了一套包括算术类型和空类型 (void) 在内的基本数据类型。算术类型分为两类:整型 ( 包括
字符
和布尔类型
在内 ) 和浮点型。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。 -
C++标准规定了算术类型尺寸的最小值 (参考P30表2.1),同时允许编译器赋予这些类型更大的尺寸,并且规定一个
int
至少和一个short
一样大,一个long
至少和一个int
一样大,一个long long
至少和一个long
一样大。其中,数据类型 long long 是在 C++11 中新定义的。 -
可寻址的最小内存块称为字节 (byte),存储的基本单元称为字 (word),它通常由几个字节组成。大多数机器的字节由 8 比特构成,字则由 32 或 64 比特构成。为了赋予内存中某个地址明确的含义,必须首先知道存储在该地址的数据的类型。类型决定了数据所占的比特数以及该如何解释这些比特的内容。
-
C++ 标准并没有规定带符号类型应如何表示,但是约定了在表示范围内正值和负值的量应该平衡。因此,8 比特的 signed char 理论上应该可以表示 -127 至 127 区间内的值,大多数现代计算机将实际的表示范围定为 -128 至 127。因此当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的:
// 假设 char 占 8 比特,c2 的值是未定义的 // 因为 c2 有的机器是 -128,有的被实现为 -127 signed char c2 = 256;
此外,类型 char 比较特殊, 它是
signed
还是unsigned
型是未定义的。所以算术运算中不要使用 char。因为在有的机器是 signed 有的则是 unsigned。 -
含有无符号类型的表达式:
- 当一个算术表达式中既有无符号数又有 int 值时,那个 int 值就会转换成无符号
- 当从无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须确保结果不能是一个负值
-
切勿混用带符号类型和无符号类型
如果表达式里既有带符号类型又有无符号类型,当带符号类型取值为负时会出现异常结果,这是因为带符号数会自动地转换成无符号数。例如,在一个形如 a*b 的式子中,如果 a=-1,b=1,而且 a 和 b 都是 int,则表达式的值显然为 -1. 然而,如果 a 是 int,而 b 是 unsigned,则结果须视在当前机器上 int 所占位数而定。在我们的环境里,结果是 4294967295。
-
通过添加如 (表2-2) 中所列的前缀和后缀,可以改变整型、浮点型和字符型字面值的默认类型。
变量
-
C++ 程序员们在很多场合都会使用对象 (object) 这个名词。通常情况下,对象是指块能存储数据并具有某种类型的内存空间。
-
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
-
变量能且只能被定义一次,但是可以被多次声明。
-
显式地访问全局变量
std::cout << ::reused << std:endl;
复合类型
-
复合类型是指基于其他类型定义的类型。C++ 语言有几种复合类型,其中两种:引用和指针。
-
一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定(bind)在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
-
因为引用本身不是一个对象,所以不能定义引用的引用。
网友评论