C++ primer 梳理(自用)

1.5 类简介 p17

类定义了行为

术语表

参数(实参, argument) 向函数传递的值

赋值(assignment) 抹去一个对象的当前值, 用一个新值取代之, (初始化非赋值)

程序块(block)

缓冲区(buffer)

内置类型(built-in type)

(Cerr?clog?)

字符串字面值常量(character string literal)

cin

类(class) 一种用于定义自己的数据结构及其相关操作的机制

类类型(class type) 类定义的类型. 类名即为类型名

第二章 变量和基本类型

2.1 基本内置类型(包括算术类型和空类型

  2.1.1 算术类型

   1)整型(包括字符和bool类型) 和实型(浮点型)

   2)对于除去bool型和扩展的字符型之外, 其他整型可以划分为带符号的(signed)和无符号的(unsigned)两种

   int、short、long和long long都是带符号的(等价于signed int…

   字符型被分为三种:char、signed char和unsigned char(类型char表现为signed还是unsigned由编译器决定

  2.1.2 类型转换

   1)bool类型的值为1或0

   2)对于无符号类型, 若赋给它一个超出表示范围的值, 结果是初始值对无符号类型表示数值总数(若表示范围为0~255, 则表示数值总数为256)取模后的余数

   3)对于带符号类型, 若赋给它一个超出表示范围的值, 结果是为定义的(undefined)

   4)切勿混用带符号类型和无符号类型

  2.1.3 字面值常量

   1)整型字面值, 可以写作十进制数(20)、八进制数(024)或十六进制数(0x14)

   2)浮点型字面值, 可以写作一个小数(1.53)或以科学计数法表示的指数(153E-2, 负的就是除以,2是指除数值为10的2次方)

2.2 变量

  2.1.1 变量定义

   1)初始值, (初始化不是赋值, 初始化的含义是创建变量时赋予其一个初始值, 而赋值的含义是把对象的当前值擦除, 而以一个新值来替代

   2)列表初始化(list initialization), 指用花括号{}来初始化, (如果我们使用这种方法初始化且初始值存在丢失信息的风险, 则编译器将报错

   3)默认初始化, 此时变量被赋予“默认值”, 而该值到底是什么由变量类型和定义定量的位置决定

对于未被显式初始化的内置类型的变量, 如果它被定义在任何函数体外, 它的“默认值”为0, 若被定义在函数体内部, 它将不被初始化(一种例外情况), 它的值是为定义的随机值

类的对象如果没有显式地初始化, 则其值由类决定

  2.2.2 变量声明和定义的关系

   1)声明, 规定了变量的类型和名字; 定义, 还申请存储空间, 也可能会为变量赋一个初始值

extern int j;//声明

(函数体外)extern int j = 1;//定义(在此处无const修饰的作用下, extern作用被抵消

(函数体内)extern int j = 1;//报错

  2.2.3 标识符

  2.2.4 名字的作用域

   1)嵌套作用域

作用域中一旦声明了某个名字, 它所嵌套的所有作用域中都能访问该名字. 同时, 允许在内层作用域中重新定义外层作用域已有的名字(若此时仍要访问外层作用域的名字, 需在变量名前面加上::(作用域运算符)

2.3 复合类型

  2.3.1 引用, 引用即别名, 引用并不是一个对象, 所以不能定义引用的引用; (除两种特殊情况)引用只能绑定在一个对象上而非字面值或是某个表达式的计算结果

  2.3.2 指针 (与引用的不同: 本身就是一个对象; 可以先后指向几个不同的对象; 无须在定义时赋初值)

   1)获取对象的地址: &(取地址符)

   2)指针值

   3)利用指针访问对象 (解引用只适用于那些确实指向了某个对象的有效指针

   4)空指针 (int *p = nullptr;

   5)void* 指针

   6)理解复合类型的声明

   7)指向指针的指针

   8)指向指针的引用

2.4 const 限定符 (你是个常量xx, 你就必须给我初始化!

   1)初始化和const

  2.4.1 对const的引用(常量引用)

   1)非常量引用只能绑定在一个与之类型相符合的对象上,而非一个字面值或是某个表达式的运算结果; 常量引用允许任意表达式为它赋初值, 它可以绑定非常量的对象(这个对象可能同时与其他非常量引用r2绑定, r2可以修改该对象, 导致常量引用的值也被修改)、字面值(42)、一般表达式(含加减乘除运算符)…

   2)对const的引用可能引用一个并非const的对象, 常量引用仅仅是对引用可参与的操作就做出了限定, 对于引用的对象本身是不是一个常量未作限定

  2.4.2 指针和const(注意区别常量指针和指向常量的指针

   普通指针不能用来存放常量对象的地址, 必须用指向常量的指针(底层const, 而非顶层const)来存放常量对象的地址

   常量指针, 意味着不变的是指针本身的值(所指向的对象是哪个), 而非所指向的那个对象的值

   顶层const 底层const

  

  2.4.4 constexpr和常量表达式

   1)constexpr变量: 如果你认定该变量(的值)是一个常量表达式, 就可以把变量声明为constexpr类型

   2)字面值类型: 算数类型、引用和指针(其初始值必须为nullptr、0或存储于某个固定地址中的对象比如定义在函数体之外的对象)都属于字面值类型, 自定义类不属于

   3)指针和constexpr: 限定符constexpr只对指针有效, 与指针所指的对象无关, (constexpr会把它所定义的对象置为了顶层const

2.5 处理类型

  2.5.1 类型别名

   1)类型别名有两种定义方式: typedef或者using

   2)如果某个类型别名指代的是复合类型(或常量), 那你在理解的时候千万不能把类型别名直接替换成本来的样子, 这样可能导致基本数据类型的改变, 使限定符修饰对象改变

  

  2.5.2 auto 类型说明符(难顶)

   1)当我们想把一个表达式的结果赋给一个变量的时候, 我们需要先声明这个变量, 而声明这个变量之前我们需要知道它的类型, 有时候根本无法知道诶! 就需要计算机来帮助我们啦! 它会通过表达式的类型来推算出变量的类型

使用auto可以在一条语句中声明多个变量, 因为一条声明语句只能由一个基本数据类型, 所以该语句中所有变量的初始基本类型都必须一样

   2)引用参与的表达式, 编译器以引用对象的类型作为auto的类型

   3)auto一般会忽略掉顶层const, 而底层const得以保留,  (如果希望得到顶层const, 需要明确指出, 在首位加上const

2.6 自定义数据结构

术语表

1)地址(address) 是一个数字, 根据它可以找到内存中的一个字节(地址占4到8个字节)

2)别名声明(alias declaration) 为另外一种类型定义一个同义词: 使用“名字=类型”的格式将名字作为该类型的同义词(但并不是字面意义上白纸黑字地去替换哦

3)算术类型(arthmetic type) bool值、字符、整数、浮点数等内置类型

4)auto 是一个类型说明符, 通过变量的初始值来推断变量的类型

5)基本类型(base type) 是类型说明符(类型的名字), 可用const修饰, 在声明语句中位于声明符(可能存在的类型修饰符+变量名字)之前

6)绑定(bind) 令某个名字与给定的实体关联在一起, 使用该名字就是使用该实体(例如: (无const修饰的)引用就是将某个对象绑定在一起

7)字节(byte) 内存中可寻址的最小单位, 大多数机器的字节占8位

8)类成员(class member) 类的组成部分

9)复合类型(compound type) 是一种类型, 它的定义以其他类型为基础

10)const 是一种类型修饰符, 用于说明永不改变的对象, const对象一经定义就无法再改变, 故必须初始化

11)常量指针(const pointer) 是一种指针, 它的值永不改变

12)常量引用(const reference) 是一种习惯叫法, 含义是指向常量的引用

13)常量表达式(const expression) 能在编译器时计算并获取结果的表达式

14)声明符(declarator) 是声明的一部分, 包括被定义的名字和类型修饰符, 其中类型修饰符可以有ye可以没有

15)默认初始化(default initialization) 当对象未被显式地赋予初始值时执行的初始化行为, 由类本身负责执行的类对象的初始化行为, 全局作用域的内置型对象初始化为0, 局部作用域的对象未被初始化即拥有为定义的值

16)全局作用域 位于其他所有作用域之外的作用域

17)列表初始化 利用花括号把一个或多个初始值放在一起的初始化形式

18)字面值 是一个不能改变的值, 如数字、字符(单引号)、字符串(双引号)等

19)空指针(null pointer) 值为0的指针, 空指针合法但不指向任何对象, nullptr是表示空指针的字面值常量

20)指针(pointer) 是一个对象, 存放着某个对象的地址, 或者某个对象存储区域之后的下一地址, 或者0

21)指向常量的指针(pointer to const) 是一个指针, 存放着某个常量对象的地址, 指向常量的指针不能用来改变它所指的对象

22)引用(reference) 是某个对象的别名, 只是名字, 仅此而已

23)typedef 为某类型定义一个别名, 当关键字typedef作为声明的基本类型出现时, 声明中定义的名字就是类型名

24)变 命名的对象或引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值