第二章

作者: wjundong | 来源:发表于2019-12-27 15:43 被阅读0次

基本内置类型

  • 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)在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。

  • 因为引用本身不是一个对象,所以不能定义引用的引用。

相关文章

网友评论

      本文标题:第二章

      本文链接:https://www.haomeiwen.com/subject/pvedoctx.html