C++中的const的使用详解

 C++中的const的使用详解

const在c/c++中还是会经常出现的,并且如果不理解const会在编程出现的错误而不知所措,无法理解。下面从几个角度简要理解const的内容,应该还是蛮有用的。

const与指针类型

const int*p = NULL; 和int const*p = NULL;是等价的。因为const都在“ * ”的前面,其实是以*为标志的。

1. int x = 3; const int *p = &x; 


// p = &y;正确 , //*p = 4;错误 

指针其实一般是4个字节长度。p的内容是存储0x….,就是其他数据的地址。因此这里的const修饰*p就是说:*p的内容是不可直接被赋值改变的。

而p本身存储的地址是可变的,可以变成其他的0x…..当p指向其他的数据地址时,*p也就随之变成新的数据。

int x = 3; int *const p = &x; //p = &y是错误

总结:其实是看这个const是在的前面还是后面,如果在的前面,则表示修饰的是整个“ p ”,而在后面,则表示修饰的是只有p。

显然有:在前面,则表示整个*p是const的,因此p可以指向其他的地址,而*p则是const的,无法改变。同理,int *const p = &x;则表示指针p是固定的,就是说p指针存储的地址是固定的,其内容是const,因此无法修改为其他值(即指向其他地址)。

const与引用

int x = 3; const int &y = x; 
//x = 10;正确 //y = 20; 错误 

引用前面有const,所以不能通过y来修改x的值。

本人的理解:const int &y就是相当于const int *y1 = &x;然后y = 20就相当于*y1 = 20;这显然时不允许的(就如前面所说的,*p时const,无法直接赋值给*p)。因为引用就相当于给x取了一个别名y,此时y不就是y1指针所指的内容吗?也就是说上面的例子:y = 20;就是相当于 *y1 = 20.

错误的const使用

其他:const int x = 3; int *y = &x; 不能通过编译。因为可能通过*p修改本应该是const的x;
int x = 3; const int *y = &x; 这是可以的,这里的x是可变的,通过由于*y是const的,因此*y就是只能是读取x的值,而不具有写入x的权利。

总结:可以说是只能把一个东西权限缩小,而不能使其原始的权限增大。

const在函数中的应用

主要是防止函数的误操作,对值进行更改

void fun(const int&a,const int&b) 
{ 
//这里就不能对a或b进行更改,否则会编译出错 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...