关于const 修饰变量、引用、指针的说明

来源:互联网 发布:光伏数据采集器接法 编辑:程序博客网 时间:2024/05/17 23:37
        //const int bufSize;\\  const常量必须初始化
const int bufSize = 500; 
//bufSize = 600;  //创建后不能改变其值
int num1 = bufSize;
const int num2 = num1;  //实数、数值拷贝,const 常量和普通变量之间是可以互相拷贝的,那是因为他们
//一旦拷贝完后之后,就没有了关联,各自还是各自
//而指针就不一样了,
//在多个文件共享const 变量,我们必须在申明和定义之前都加上extern
//如果在各个文件中都extern const int XX ,那么它们被认为是各自独立的个体,不能共享
//常量引用:(另外,应用必须初始化,因为引用不创建实体,必须依附于实体上才能存活)
const int ci = 1024;
int cj = 2048;
const int &r1 = ci; 
//int &r2 = ci; //这样就不行,因为限定符丢失,使人感觉可以通过r2更改ci,实则ci是不能够被修改的
const int &r3 = cj; //这样就可以因为只是限定不能从r3修改cj 但是可以以其他的方式修改cj;
//const常量引用相对于普通引用的区别在于常量引用不允许从该引用名下更改被引用对象的值
//r1 = 512;  //错误
const int &num4 = 42;  //不是说引用不创建实体吗?那么这个42是存在哪里?可能是这种情况下系统给42分派了一段内存


double x = 6.28;
const int &y = x;  //并没有报错,,,,,而primer上说报错


const int *ptr2 = &ci, *const ptr3 = &cj;

ptr2 = ptr3; //而对于指针常量的赋值,通常这个顶层const会失效

//PS:所以总结来说,const 直接修饰变量时,const常量和非const变量之间是可以相互赋值或者初始化的,因为他们直接赋完值后,再无瓜葛
//而当const修饰引用或者指针时,这种赋值或者初始化就不是双向的,只能有非常量向常量赋值初始化,而不能有常量向非常量赋值初始化
//我们可以这样理解,我们定义一个常量,我们的意图是不让程序去修改它,如果我们用一个非常量引用绑定他,那么程序设计者就可能从非常量
//引用试图改变常量的值,同样道理指向常量的指针也是如此,


//而对于指针常量的赋值,通常这个顶层const会失效

原创粉丝点击