定义:

  const 主要用于声明常量。当常量为对象时,对象值不可改变;当常量为指针时,该指针不可移动或重新赋值,但我们可以通过它去修改该指针的指向对象的值(前提是无需移动指针的修改)。所谓的形参、返回值、成员变量均是变量,因此当const修饰他们时,亦属于常量范畴。不过常成员变量必须在类的构造函数的初始化列表中进行初始化。

  const 还可用于声明类的常成员函数。该常成员函数不能修改类中任何非const成员变量及调用非const成员函数。

语法格式:

  常量为对象时:

  const Type M=常量值(表达式)或Type const M=常量值(表达式);

  const Type *M=指针对象地址或Type const *M=指针对象地址;

  常量为指针(常指针)时:

  Type * const M=指针对象地址;

  理解该语法格式先要了解类型修饰符的优先级及结合方向的几个概念。const 是一个左结合的类型修饰符,它与其左侧的类型修饰符合为一个类型。* 是一个右结合的指针类型修饰符,&是一个右结合的引用类型修饰符,两者处于同一优先级。[]优先级比*高,所以当变量中含有[]时,M通常先和[]结合。声明的结合开始点为变量名M。因此,const 放在Type前后是无区别的,但当const放在指针符*左侧时const与type结合,则表示修饰的是指针内容.当const放在指针符*右侧时const与*结合,则表示修饰的是指针本身。类似的结合应用于&。

  类的常成员函数时:

  返回值 函数名(形参)const;

作用:

  使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,增强程序的健壮性,减少bug的出现。

与define区别:

() 存储方式不同

define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

const常量会在内存中分配(可以是堆中也可以是栈中)。

最新文章

  1. ORACLE 11gR2 DG(Physical Standby)日常维护01
  2. iOS 升级HTTPS通过ATS你所要知道的
  3. webform的页面缓存
  4. JAVASE 面试总结(1)
  5. Arcgis Server 默认服务端口号修改方法
  6. 使用iMovie和Keynote制作App Preview
  7. 探秘重编译(Recompilations)(1/2)
  8. 深入理解Java对象的序列化与反序列化的应用
  9. IE 坑爹的浏览器兼容模式
  10. Recommender Systems 基于知识的推荐
  11. linux file命令
  12. html中DIv并排显示问题
  13. MAC本如何优雅的创建定时任务
  14. Mysql双机热备配置(超详细多图版)
  15. javax.mail
  16. overflow:hidden;和clear:both;的不同点
  17. logging模块、sys模块、shelve模块
  18. Roslyn如何实现简单的代码提示
  19. Oracle记录-Linux JDK与Oracle profile环境配置
  20. Linux - iptable 限制 IP 访问端口

热门文章

  1. C#经典之Application.DoEvents()的使用
  2. mysql 调用存储过程及例子
  3. 关于Scrapy框架的安装
  4. easyui 验证控件 tooltip message显示位置
  5. 条件注释+JS实现各版本IE浏览器className
  6. Android 内部存储安装apk文件实现
  7. 对discuz的代码分析学习(一)目录结构
  8. codeforces 650B . Image Preview 二分
  9. javascript 数组和字符串的转化
  10. passwordauthentication yes