const修饰符总结

  • 1、什么是const?

    const就是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字,或者说const是定义常变量的关键字,常类型的变量或对象的值是不能被更新的

  • 2、为什么引入const?

    const推出的初始目的,就是为了取代预编译指令,消除它的缺点,同时继承它的优点

  • 3、const有什么主要的作用?

    (1)可以定义const常量,具有不可变性。例如:const int MAX = 100; int array[MAX];

    (2)便于进行类型检查,使编译器对处理内容有更多了解,以消除一些隐患

        例如:void f(const int i) {......}编译器就会知道 i 是一个常量,不允许修改。

    (3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面例子,如果在函数体内修改了 i ,编译器就会报错

        例如:void f(const int i){ i = 1001;} error!

    (4)为函数重载提供了一个参考

class A
{   
void f(int i) { ...... }  //一个函数   void f(int i) const { ...... }  //上一个函数的重载..... };

    (5)提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

  • 4、const的使用

  const在实际中用得并不多,先列出如下const短小总结,const关键字修饰指针,const在*号的左边还是右边(左定值,右定向)

1.const int a;      //a是一个常整形数
2.int const a;      //a是一个常整形数
3.const int *a;      //a是一个指向常整数型的指针(整形数是不可修改的,但指针可以)
4.int const *a;      //a是一个指向常整数型的指针(同上)
5.int *const a;      //a是一个指向整形数的常指针(指针保存内容不可修改)
6.int const * const a;  //a是一个指向常整形数的常指针(指针指向的整形数是不可修改的,同时指针也是不可修改的)

  (1)int const * ;

    int const *a 和 const int *a意义一样。

    从右往左看,进行解析,这个a是一个指针,而且是一个常量,类型是整形,称为指针常量

    特点:*a指向一个整形的常量,但是不能通过修改p所指向内存单元的值,只能通过修改其所指向的对象,可称为指向常整形的指针

int data = 88;
const int number = 99;
const int *p1 = &number;

p1 = &data;     //允许通过编译,允许修改所指向的对象
*p1 = 10086;   //不允许通过编译,无法通过指针修改内容

  (2)int * const  a;

    从右往左看,一个常量a被定义为整形指针。可称为指向整形的常指针

    特点:常量a是一个整型类型的指针,它能通过指针来进行修改其中的内容,但当它已经指向一个地址之后,便不能再指向其他地址,和int const*有区别

int data = 88;
int k = 99;
int * const p2 = &data;

*p2 = 10010;  //允许通过编译,允许通过指针修改内容;
p2 = &k;     //不允许通过编译,无法修改所指向的对象;

  (3)const int * const p;

    从右往左看,结合上面两个,可以看做常量指针常量,即常量p是一个整形的指针,而且这个指针还是个常量

int data = 88;
int k = 99;
int const * const p3 = &data;

p3 = &k;    //不允许通过编译
*p3 = 4399;  //不允许通过编译

 

posted @ 2020-09-23 16:51  青团青  阅读(433)  评论(0编辑  收藏  举报