• 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;  //不允许通过编译

最新文章

  1. [原] Cgroup CPU, Blkio 测试
  2. window.onload和$(document).ready(function(){})的区别
  3. 一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端
  4. Light OJ 1028 - Trailing Zeroes (I) (数学-因子个数)
  5. SharpGL学习笔记(十七) 立体文字和平面文字
  6. JS定时执行,循环执行
  7. pythonweb自动化测试
  8. 20160206.CCPP体系详解(0016天)
  9. vmware虚拟机上网:host-only
  10. 根据Mob官网的天气预报接口写了一个简单的demo
  11. 微信小程序开发之选项卡
  12. Intent的作用和表现形式简单介绍
  13. 转:pycharm community debug django projects
  14. windows 访问局域网共享文件
  15. Autoloading Classes
  16. 【洛谷】【treap/堆】P2073 送花
  17. python作业ATM(第五周)
  18. 【BZOJ4515】[Sdoi2016]游戏 树链剖分+线段树
  19. Visual Studio for Mac 安装无响应或者无法连接网络等解决方法
  20. Fill Table Row(it’s an IQ test question)

热门文章

  1. C语言学习之我见-strncmp()字符串比较函数(控制范围)
  2. opencv-python获取视频信息
  3. SAP 日期计算
  4. VirtualBox虚拟机安装Ubuntu系统后,增加内存空间和处理器核心数
  5. UiPath官网认证中文教程
  6. idea控制台不能输入问题
  7. Spring框架系列(13) - SpringMVC实现原理之DispatcherServlet的初始化过程
  8. Tapdata 实时数据融合平台解决方案(二):理解数据中台
  9. Python中print()函数的用法详情
  10. 5-4 Seata 分布式事务管理