学习目标:
const的学习与理解学习内容:
const限定符学习时间:
6.28学习内容:
1、const的引用:称之为对常量的引用,对常量的引用不能被用作修改它所绑定的对象。如果一个非常量引用指向一个常量引用将会发生错误。
2、引用的类型必须与其引用对象的类型一致。第一种例外情况就是在初始化常量引用时允许任意表达式作为初始值,只要该表达式的结果可以转换成引用的类型即可。
3、对const 的引用可能引用一个并非const的对象,
int i = 1;
int &r1 = i; //引用r1绑定对象i
const int &r2 = i; //引用r2绑定对象i,但是不运行通过r2修改i的值
r1 = 0; //r1并非常量,i的值修改为0;
r2 = 0; //错误:r2 是一个常量引用
4、指向常量的指针:不能通过该指针改变对象的值。
const double pi = 3.14;
double *ptr = π //错误
const double *cptr = & pi; //正确
*cptr = 42; //错误:不能给*cptr赋值
5、常量指针:把指针本身定义为常量。常量指针必须初始化!!!,而且一但完成,它的值(存放指针中的那个地址)不会改变。把*放在const前说明指针是一个常量。不变的是指针本身的那个值,而非指向的那个值.
int errnumb = 0;
int *const curtrr = &errnumb; //curerr 将一直指向errnumb。
const double pi = 3.14259;
const double *const pip = π
//pip是一个指向常量的常量指针。本身存储地址不能修改,指向对象的值也不能修改
判断方法从右向左读,
6、对于指针来说
顶层const:表示指针本身是个常量。
底层const:表示指针所指的对象是一个常量。
7、constexpr和常量表达式:指值不会改变并且在编译过程中就能得到结果的表达式。关键字constexpr会把它定义的对象置为顶层const。(比如常量指针)
8、类型别名:传统的使用方式是使用关键字typedef
typedef double wages; // wages是double的同义词
新规定的第二种办法为别名声明:using
using SI = Sales_item;
9、auto 让编译器通过初试值来推断变量的类型。使用auto在一条语句中声明多个变量。因为一条声明只能有一个基本数据类型,所以该语句中所有变量的初试基本数据类型都必须一样:
auto i= 0,*p = &i; //正确:i是整数,p是整型指针
auto sz = 0,pi = 3.14; //错误:sz和pi的类型不一致
10、decltype 从表达式中得到要定义变量的类型,但是不用该表达式初试化变量。