1、变量
类型转换转换的过程:
- 非bool型的算术值赋值给bool类型,初始值为0则结果为false,否则结果为true
- bool赋值给非bool,初始值为false时,结果为0;初始值为true,结果为1
cpp语言规定的转义序列:
名称 | 符号 | 名称 | 符号 | 名称 | 符号 |
---|---|---|---|---|---|
换行符 | \n | 横向指标符 | \t | 报警符 | \a |
纵向制表符 | \v | 退格符 | \b | 双引号 | \" |
反斜线 | \\ | 问号 | \? | 单引号 | \’ |
回车符 | \r | 进纸符 | \f |
指定字面值的类型:
前缀 | 含义 | 类型 |
---|---|---|
u | Unicode 16字符 | char16_t |
U | Unicode 32字符 | char32_t |
L | 宽字符 | wchar_t |
u8 | UTF-8(仅用于字符串字面常量) | char |
变量命名规范:
- 标识符要能体现实际含义。
- 变量名一般用小写字母
- 自定义的类名一般用大写字母开头
引用(此处是左值引用):为对象起另外一个名字,即只是名字,但是还是共用这个值的大小,通过将声明符写成&d
的形式来定义引用,如下:
int val = 1024;
int &refVal = val; //refVal指向val(是val的另外一个名字)
注意:
- 引用必须被初始化;
- 初始化完成之后,引用将和初始值绑定在一起
- 引用类型的初始值必须是一个对象,不能是数值
- 引用的类型对象必须是相同的,int型对象必须对应int型引用
2、指针
指针:实现对其他对象的间接访问,特点:1、其本身是一个对象,允许对指针进行赋值和拷贝;2、指针无须在定义时赋值。定义形式:*d
,例如:
int val = 34;
int *ptr = nullptr;
int *p = &val; //p存放变量val的地址(p指向变量va的指针)
指针的值的4种状态:
- 指向一个对象
- 指向紧邻对象所占空间的下一个位置
- 空指针,即指向任何对象
- 无效指针,上述情况之外的其他值
指针赋值语句的判断:改变了指针的值?还是指针所指向的对象
eg:
int *pi = nullptr;
int val = 34;
pi = &val; //pi的值被改变,pi指向了val
*pi = 12; //val的值被改变,指针p未改变,即pi指向的对象发生了改变
const 限定符
定义该变量使其值不能改变。默认状态下,const对象仅在文件内有效。
对于const变量,不管是声明还是定义,都在前加 extern 关键字,这样定义一次即可。
const引用:将引用绑定到const对象上,称之为对常量的引用,对常量的引用不能被用作修改它所绑定的对象
示例:
const int ci = 1024;
const int &r = ci; //引用及其对应的对象都是常量
const指针
(1)顶层const(常量指针):把*
放在const关键字之前来说明指针是一个常量,即不变的是指针本身的值而非指向的那个值。
(2)底层const(指针常量):把*
放在const关键字之后来说明指针的值是一个常量,即不变的是指针所指向的值而非本身的地址值。
示例:
int num1 = 0,num1 = 1;
int *const cur1 = &num1; //1
int const *cur2 = &num2; //2
const double pi = 3.14;
const double *const pip = π //pip是一个指向常量对象的常量指针
对上述1和2的理解:
cur1
是一个地址为“常量”(固定值)的指针,即不能改变cur1的地址,如指针的cur1++
、cur1--
操作,但是能够修改*cur1
的值,如对其赋值*cur1 = 1;
,此时num的值也随之修改。也就是(1)的结论。
cur2
是一个指向的值为常量的指针,即不能够修改*cur2
的值,如对其赋值*cur2 = 3;
,但是,可以改变cur2的地址,如指针的cur2++
、cur2--
操作,也就是(2)的解释
弄清楚上述声明最有效的方法就是从变量名开始,从右至左阅读。离cur1
最近的是const,所以cur1
是一个常量,前面符号是*
,因此cur1
是一个常量指针(指针的地址是常量)。同理,对于cur2
,最近的是*
,所以cur2
是一个指针,指针前面加上const修饰,故cur2
是一个指针常量(指针指向的值是常量)。
tip:在C++11中,允许将变量声明为constexpr类型来由编译器验证变量的值是否是一个常量表达式
示例:
constexpr int mf = 20;
3、decltype类型指示符
作用:选择并返回操作树的数据类型
decltype和auto的区别:decltype的结果类型与表达式形式相关。有一种情况注意:对于decltype所用的表达式,变量名加上括号与不加括号,得到的类型会不同。若decltype使用的是一个不加括号的变量,得到的结果即改变量的类型;若给变量加上一层或多层括号,编译器会当其作为一个表达式
注意:decltype((variable))(双层括号!!!)的结果永远是引用,而decltype(variable)结果只有当variable本身就是一个引用时才是引用