指针的类型必须与其所指对象类型一致 允许指向常量的指针指向一个非常量对象 获取的,改变值的; 指向常量的指针没规定其所指的对象必须是一个常量 所谓指向常量的指针仅仅要求不能通过该指针改变对象值,而没有规定那个对象的值不能通过其他突进 改变 所谓指向常量的指针或引用,指向常量,自觉的不去改变所指对象的值; const指针 指针是对象而引用不是,指针本身可以定为常量 常量指针必须初始化const pointer 常量 指针一旦初始化,它的值-存放在常量指针中的值-地址就不能再改变 把*放在const关键字之前用以说明指针是常量 不变的是指针本身的值而非指向的那个值
int errNumb = 0; int *const curErr = &errNumb; //curErr将一直指向errNumb const double pi = 3.14; const double *const pip = π pip是一个指向常量对象的常量指针 弄清楚声明含义最行之有效的办法--从右往左读 指针本身是一个常量并不意味不能通过指针修改其所指向的值,不能改变的是此指针不能再指向别的对象 pip是一个指向常量的常量指针 则不论所指的对象值还是pip自己存储的地址值都不能改变 指针本身是不是常量以及指针所指的是不是常量就是两个相互独立的问题 指针本身是一个对象,它又可以指向另外一个对象 指针本身是不是常量以及指针所指的是不是一个常量就是两个相互独立的问题 顶层const(top-level const)表示指针本身是一个常量 底层const(low-level const)表示 底层const与指针和引用 int i = 0; int *const p1 = &i; //指针本身常量,指针不能再指向别的对象 const int ci = 42; 一个对象是不是常量表达式由它的数据类型和初始值共同决定 将变量申明为constexpr由编译器验证变量的值声明为constexpr变量一定是常量 尽管不能使用普通函数