const int a=10;a=20;//错误
int a=10;const int b=a; //正确const int c=10; //正确
const int a=10;int b=a;//正确
int a=10;const int &b=a;
方法:
const int ci = 1024;
const int &r1 = ci; //正确,引用到常量上r1 = 42; //错误,不能对常量的引用进行修改int &r2 = ci; //错误,不能让一个非常量引用指向一个常量对象//因为引用可以通过改变自身值而改变所引用的值,所以为了防止引用改变值,禁止使用普通引用引向const常量
//代码段1double dval = 3.14;const int &ri = dval;//正确
/*上面的代码会生成一个int类型的临时变量,然后将临时变量赋值给ri,因此上述代码可以扩展为: double dval = 3.14; const int temp = dval; //临时变量 const int &ri = temp ;*/
//代码段2int i = 42;const int &r1 = i; //正确,允许将const int&绑定到一个普通对象上const int &r2 = 42; //正确const int &r3 = r1 * 2;//正确int &r4 = r1 * 2; //错误
const double pi = 3.14;
double *ptr = π //错误。ptr是非常量的const double *cptr = π//正确
double dval = 3.14;const double *cptr = &dval; //正确
const double dval = 3.14;const double *cptr = &dval; //正确*cptr = 6.28; //错误
double dval2 = 3.14;const double *cptr2 = &dval; //正确*cptr2 = 6.28; //错误
const int* pa; //常量指针int const* pb; //常量指针
int * const pc; //指针常量
int const* const pd;//常量指针常量
如果通过const的位置来判断const对什么起作用:
int a = 1;const int b = 2;
const int *pa = &a; //正确,可以指向非常量pa = &b; //正确,指向可以改变
*pa = 1; //不能通过常量指针修改所指对象的值
int a = 1;const int b = 2;int c = 3;
int* const pa = &a; //正确,a是非常量int* const pb = &b; //错误,b是常量
*pa = 10; //正确,可以修改指向对象的值pa = &c; //错误,不能修改pa的指向(因为指针自身是个常量)
int a = 1;const int b = 2;
const int *const p1 = &a; //正确const int *const p2 = &b; //正确
*p1 = 2; //错误p1 = &b; //错误
int i = 0;int j = 0;const int ci = 42;
const int *p2 = &ci;int *const p1 = &j;const int *const p3 = p2;p3 = p1; //错误,p3的指向也不能更改
int *p = p3; //错误,p3包含const,而p没有p2 = p3; //正确,p2和p3都包含底层constp1 = p3; //错误,p1的指向不能更改