基本内置类型
- 如何选择类型的几点建议
- 当明确知晓数值不能为负数时,选用无符号类型
- 使用int进行整数运算。因为short一般表示的范围比较小,而long一般和int有相同的范围。如果表示的范围超过了int就使用long long
- 算术运算时尽量不要使用char和bool,只有在存放字符型数据和布尔值的时候使用。因为char的符号在有的机器上面是有符号,在另外的一些机器上面确实无符号的,很容易出错。
- 执行浮点数运算时使用double。因为float的精度不够而且float和double的计算代价相差无几,甚至有些机器上面double的运算速度比float的速度快。
- 类型转换
- 当我们赋值给无符号类型一个超过了它表示的范围时,结果是初始值对无符号类型表示范围最大值取余后的结果。例如8bit大小的unsigned char,把-1给它,结果是-1%256,所得结果是255.
- 把一个负数转化成一个无符号类型的时候,类似于直接给一个无符号数赋值为一个负数,结果等于这个负数加上无符号数的模(例如上例)。
- 切勿混用有符号和无符号类型的数据进行运算。
- 字面值常量
- 转义序列
含义 | 字符 | 含义 | 字符 |
---|---|---|---|
换行符 | \n | 回车符 | \r |
纵向制表符 | \v | 纵向制表符 | \t |
反斜线 | \ | 退格符 | \b |
问号 | \? | 进纸符 | \f |
报警(响铃符) | \a | 双引号 | \” |
单引号 | \’ | 退格符 | \b |
还有一种泛化的转义序列
含义 | 符号 |
---|---|
响铃 | \7 |
空字符 | \0 |
换行 | \12 |
字符M | \115 |
空格 | \40 |
字符M | \x4d |
注意:如果反斜线后面跟着的八进制数字超过3个,只有前3个数字与\构成转义序列
变量
- 变量定义和声明
- 建议初始化每个内置类型的变量。这样防止不初始化后直接使用带来的危害。
- 声明和定义的区别:声明规定了变量的类型和名字,而定义在此基础之上还申请空间,也可能为变量赋初值。
- 我们可以使用extern int i;的形式,使用在其他文件中定义的变量
- 变量只能被定义一次可以被声明很多次,变量的定义必须出现在一个文件中,而其他用到该变量的文件必须对其进行声明,但是不能重复的定义
- 标识符的几点建议
- C++中标识符由字母,数字和下划线组成,且必须以字母或者下划线开头
- 标识符能体现实际含义
- 变量名一般用 小写字母
- 用户自定义的类名以大写字母开头
- 如果标识符由多单词组成,则单词中间应该有明显的标识
复合类型
- C++中有几种复合类型,其中最主要的是指针和引用
- 引用
- 引用不是对象,它是给已经存在的对象所起的一个别名
- 因为引用不是一个对象,所以不能定义引用的引用
- 引用只能绑定在某个对象身上,即是引用在定义时必须赋初值,而且中间不能改变引用的指向,不能和字面值或者表达式结果绑定在一起
- 指针
- 指针和引用区别:指针是一个对象,允许对指针进行赋值或者拷贝,而且在指针的生命周期内,允许它先后指向几个不同的对象;指针无需在定义时赋初值。
- 因为引用不是对象,没有实际地址,所以不能定义指向引用的 指针
- 解引用操作是针对指针而言的,解引用操作适用于那些确定了指向了某个对象的有效指针。
- 建议初始化所有指针
- 面对比较复杂的指针或者引用的声明的时候,从右往左阅读有助于理解他的真实含义