C++ Primer 知识点总结(第二章)

1. 算数类型

类型 范围
char 1 个字节 -128 到 127 或者 0 到 255
col 2 is centered $12
unsigned char 1 个字节 0 到 255
signed char 1 个字节 -128 到 127
int 4 个字节 -2147483648 到 2147483647
unsigned int 4 个字节 0 到 4294967295
signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767
unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767
long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 to 18,446,744,073,709,551,615
float 4 个字节 +/- 3.4e +/- 38 (~7 个数字)
double 8 个字节 +/- 1.7e +/- 308 (~15 个数字)
long double 8 个字节 +/- 1.7e +/- 308 (~15 个数字)
wchar_t 2 或 4 个字节 1 个宽字符

2.字符串的前后缀:

前缀 意义
u unicode16字符
U unicode32字符
L 宽字符
u8 utf-8
后缀 意义
u或U 表示该字面值为无符号类型
l或L 表示该字面值的类型至少为long
ll或LL 表示该字面值的类型至少为long long
f或F 表示该字面值为float类型

前后缀可以交叉结合使用:后缀UL时,表示无符号长整型。

字符用单引号‘’,字符串用双引号“”。

十进制:20 八进制:020 十六进制:0x20或者0X20

3.类型转换

  • 当我们把一个非布尔类型的算术值赋给布尔类型时,初始值为0则结果为false,否则结果为true。
  • 当我们把一个布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1。
  • 当我们把一个浮点数赋给整数类型时,进行了近似处理。结果值将仅保留浮点数中小数点之前的部分。
  • 当我们把一个整数值赋给浮点类型时,小数部分记为0。如果该整数所占的空间超过了浮点类型的容量,精度可能有损失。
  • 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8比特大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigned char所得的结果是255。
  • 当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。此时,程序可能继续工作、可能崩溃,也可能生成垃圾数据。

4.变量

  1. 命名规则:字母+数字+下划线(必须以字母或者下划线开头)
  2. 局部变量会覆盖同名的全局变量
  3. 声明:规定变量的类型和名字(在变量名前添加extern可声明变量,如果显式初始化即为定义)
  4. 定义:负责创建与名字关联的实体,并申请存储空间和赋初始值
  5. 引用:它只是为存在的对象所起的另外一个名字。它不是一个对象,没有实际的地址,定义是必须初始化
  6. 指针:本身就是一个对象,允许指针之间的拷贝和赋值
  7. const表示的不可改变的量,该变量必须初始化(可以在运行时初始化)
  8. 顶层/底层const:顶层const表示本身是常量(常量指针,声明时const必须放在指针符号后面,即:const ),底层const表示所指的对象是常量(指向常量的指针,如:int const *p_a = &num_a);执行拷贝操作时,拷入拷出对象必须具有相同的底层const资格,或能够强制转换
  9. 常量表达式:数据类型和初始值都需要是常量类型,值不会改变并在编译过程就能得到计算结果
  10. constexpr变量:一定是常量,必须用常量表达式(字面值类型,包括算术类型、引用、指针)或constexpr函数(足够简单编译时可计算结果)初始化
  11. 类型说明符auto会忽略顶层const,保留底层const
  12. 指针、常量与类型别名:typedef char pstring; const pstring cstr = 0;,与const char cstr不等价,前者的cstr是指向char的常量指针,后者中cstr是指向常量char的指针

5.const 常量

  1. const 常量必须在定义时初始化
  2. 常量指针和指向常量的指针
    • const int *p,表示指向常量的指针,不能通过p来修改p指向的值,而p本身所指向的地址是可以修改的。
    • int *const p,常量指针,表示p本身是一个const,所以p所指的地址不会变,但是地址里的值是可以修改的。
  3. 顶层const与底层const
    • 顶层const是指const修饰变量本身,即变量/对象本身是不可变的。
    • 底层const则表示这个变量所指向/引用的值不可变,即不能通过这个变量修改其值,只有对常量的引用和指向常量的指针是底层const
    • 1
      2
      3
      4
      5
      const int m = 0; //m本身是const类型的值
      const int* m2 = &m; //所以&m是一个const int*类型的,即常量取地址得到的是一个底层const
      int* const m3 = &m; //所以第二行没有错,第三行会报错:
      const int i = 0; //i是底层const
      int &i2 = i; //报错,因为i2不是底层const

本文标题:C++ Primer 知识点总结(第二章)

文章作者:微石

发布时间:2017年11月13日 - 09:11

最后更新:2018年07月19日 - 11:07

原始链接:akihoo.github.io/posts/2d70eed1.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。