2.1 基本内置类型
2.1.1算术类型
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200811163640519.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDM5MzMx,size_16,color_FFFFFF,t_70#pic_center)
- 有符号型的类型,例如 signed int a;int占用4个字节,32bit的数据。这32bit的首位,作为符号位:1为负,0为正;这样的话,只能用剩下的31bit来表示数的大小,则a的数据值范围为:-231——231-1
- 无符号型的类型,例如unsigned int a;int占用4个字节,32bit的数据。因为无符号位,故32bit全部来表示数的大小,则a的范围为:0-232-1
2.1.2类型转换
- 这一部分,书上只要讲解的是,类型转换的注意事项,对于自己使用来说,尽量规避这种使用即可;
- c++中的类型强制转化(两种方式均可)
int i = 10;
double j = (double)i;
int i = 10;
double j = double(i);
2.1.3字面值常量
![23](https://img-blog.csdnimg.cn/2020081117192159.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDM5MzMx,size_16,color_FFFFFF,t_70#pic_center)
![34](https://img-blog.csdnimg.cn/20200811171237116.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDM5MzMx,size_16,color_FFFFFF,t_70#pic_center)
- 用前缀和后缀来指定字面值的类型
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200811171730867.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2MDM5MzMx,size_16,color_FFFFFF,t_70#pic_center)
2.2 变量
2.2.1变量的定义
- 注意:初始化不是赋值,初始化的含义,船舰变量的同时赋予其一个初始值;赋值的含义是把对象的当值擦除,来用一个新值代替。
- 这一块还提到了:列表初始化。这个是要是用于对对象初始化。
- 这一块还提到了:默认初始化。这啥意思呢,比如,你定义一个全局变量int a;,在main之外定义,这个数肯定是存放在全局静态区,默认被初始化为0。
2.2.2变量声明与定义的关系
- 定义:申请存储空间,创建与名字关联的实体
- 声明:使得名字为程序所知,告诉这个文件,有这个值得存在,且已经被定义了
- 有两个文件a.cpp和b.cpp,如果b想要用a中的变量,我们只需要在a.h里面写上 extern int a ;而且声明不能给变量赋值,否则extren失效,会报错
2.2.3标识符
- 标识符:数字、字母、下划线组成
- 只能以字母、下划线开头
- 字母的大小写,C++会做区分的
2.2.4变量命名规范
- 变量名一般采用小写
- 用户自定义的类名一般以大写字母开头
- 若标识符由多个单词组成,应用下划线区分开
- 宏定义定义东西,一般全部使用大写字母
2.2.5名字的作用域
#include <iostream.h>
int temp = 10;
int main()
{
int temp = 20;
cout<<::temp<<endl;
cout<<temp<<endl;
}
2.3 复合类型
2.3.1引用
- 引用其实就是为变量、对象起了一个别名
- 引用在定义的时候,必须初始化
- 引用常用于作为函数的形参使用
- 引用其实就是“简化”的指针
int temp = 10;
int &ref = temp;
int &ueue = ref;
2.3.2指针
- 与C语言相差无几,不再赘述
- 注意的是,在C++11新标准中,当指针指向空的时候,最好用nullptr,尽量避免用NULL
2.4 const限定符
- const的对象一旦创建,其值就不能在改变了
- C++中,在定义常量的时候,尽量用const代替宏定义#define
- const常量,若想让其它文件共享,必须要在定义和声明的前面都要添加extern,这一点是与普通的变量不相同的。例如:
extern const int temp = 100;
extern const int temp;
2.4.1const的引用
- temp、ueue都不能修改
const int temp = 10;
const int &ueue = temp;
- 可以通过修改temp而改变ueue,但是不可以通过ueue来改变temp
int temp = 10;
const int &ueue = temp;
const int &Queue =55;
int &Queue = 55;
2.4.2const的引用与指针以及顶层const
- 这一块,确实有点恶心,尤其是这个相互赋值问题,看书看的我有点晕。先跳过吧。
- 先记住最基本的:
const char *temp
char *const temp
const char *const temp
2.5 处理类型
2.5.1类型别名
typedef int ElemType;
ElemType temp = 10;
- C++11新规(C++20都出了我还在看C++11,/哭)
using ElemTpye = int;
ElemType temp = 10;
2.5.2auto类型说明符
- 这个东西是个啥呢?
- 编程的时候,往往需要把表达式的值赋给变量,这个表达式可能是一个函数,但是有时候呢,这个函数或者表达式呢根本找不到,那我们在定义变量的时候,就不知道定义什么类型了,而这个auto可以帮我们自动分析这个表达式是什么类型
auto item = val1 + val2;
- atuo还有与常量以及复合类型的结合,有点复杂,没看
2.5.3decltype类型指示符
- 有时候,我们需要知道右值表达式的类型,但是并不想用该表达式的值初始化变量,也是不想去运行这个表达式,而auto呢,需要去运行这个表达式,注意这个两个的区别。
decltype (fun()) sum = x;
- 这块最简单的,先知道auto和dectltype是干啥的就行了。