const有以下几个作用:

1. 定义const常量,具有不可变性。eg. const int MAX = 100;  int Array[MAX];

2. 进行类型检查,使编译器对处理内容有更多的了解,消除隐患。eg. void f(const int i){....}编译器就会知道i是一个常量,不允许修改。

3. 避免模糊意义的数字出现,同样何以很方便的进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变。

4. 保护被修饰的东西,防止被意外修改,增强了程序的健壮性。

5.为函数重载提供参考

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

6. 节省空间,避免不必要的内存分配

#define PI 3.14159   //该宏用来定义常量
const double Pi=3.14159; //此时并未将Pi放入只读存储器中
double i=Pi; //此时为Pi分配内存,以后不再分配
double I=PI;//编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再次进行宏替换,又一次分配内存

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出立即数,所以const定义的常量在程序运行过程中只有一份复制品,而#define定义的常量在内存中有若干个复制品。
7. 提高了程序的效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与内存的操作,使得它的效率特很高。

引申1:什么情况下需要使用const关键字

1. 修饰一般常量。eg.int const x=2 或 const int x=2。

2. 修饰常数组。eg. int const a[8] = {1,2,3,4,5,6,7,8};  const int a[8]={1,2,3,4,5,6,7,8};

3. 修饰常对象。常对象是指对象常量。eg. class A; const A a; A const a;

  定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符const可以放在类名后面,也可以放在类名前面。

4. 修饰常指针

const int *A; //const 修饰指向的对象,A可变,A指向的对象不可变
int const *A; //const 修饰指向的对象,A可变,A指向的对象不可变 int *const A; //const 修饰指针A,A不可变,A指向的对象不可变 const int *const A; //指针A和A指向的对象都不可变

5. 修饰常引用。

const作用的更多相关文章

  1. C++ 中const作用

    一.对const与#define的特点及区别的理解 #define只是用来做文本替换的,#define常量的生命周期止于编译期,它存在于程序的代码段,在实际程序中它只是一个常数,一个命令中的参数,并没 ...

  2. C语言关键字const作用及其应用

    只要学过C语言的,都有知道const这个关键字,知道是用来定义常量的,如果一个变量被const修饰,那么它的值就不能再被改变,那么还有什么其他作用呢? 一.const常用作用 1.修饰局部变量 con ...

  3. const 作用

    转载自:http://www.cnblogs.com/xudong-bupt/p/3509567.html 1.const 修饰成员变量 1 #include<iostream> 2 us ...

  4. C语言中Static和Const关键字的的作用

    程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块 ...

  5. const ;static;extern的使用与作用

     const                                                                /**      const :常量      const  ...

  6. C语言中Static和Const关键字的的作用 -- 转

    static作用:“改变生命周期” 或者 “改变作用域” 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-- ...

  7. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  8. C++中const的全面总结

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类 ...

  9. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

随机推荐

  1. 面试STAR法则

    昨天投了几家公司的简历,A公司还没看简历,B公司没有通过简历,另外的后说(其实只投了这两家),B公司最终给了蛮中肯的回复: 虽然,一开始看到这样的结果,有些失落,仔细看过回复后,有些不屑和好奇.百度了 ...

  2. 《从零开始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理

    原创文章,欢迎转载.转载请注明:关东升的博客 在Swift原生数据类型.Foundation框架数据类型和Core Foundation框架数据类型之间转换过程中,虽然是大部分是可以零开销桥接,零开销 ...

  3. ES6学习之Babel的正确安装姿势

    开始学习ES6,写点东西放上博客^_^ 本文介绍Babel6.x的安装过程~ 首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行 ...

  4. 160623、理解 Promise 的工作原理

    Javascript 采用回调函数(callback)来处理异步编程.从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的回调金字塔(Pyramid of Doo ...

  5. 《JAVA多线程编程核心技术》 笔记:第六章:单例模式与多线程

    一.立即加载/"饿汉模式"和延迟加载/"懒汉模式" 立即加载(又称饿汉模式):在使用类的时候已经将对象创建完毕,常见实现方法是直接new实例化 延迟加载(又称懒 ...

  6. 淘宝订单数据转CSV

    <html> <body> <div id="result"> </div> <div> <textarea st ...

  7. java中的printf

    转载自: http://www.cnblogs.com/healthy-tree/archive/2012/08/07/2626665.html http://www.cnblogs.com/Tank ...

  8. https://github.com/arut/nginx-rtmp-module.git

    https://github.com/arut/nginx-rtmp-module.git NGINX-based Media Streaming Server nginx-rtmp-module P ...

  9. requests 中response如何改变编码格式

    查看初始编码 首先查看拿到的response编码格式: (就不放代码了,因为此例需要用到cookie,可自行找个网站具体测试) 可见初始编码为:ISO-8859-1 修改编码 初始编码: 修改后编码: ...

  10. springboot整合JPA创建数据库表失败

    org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table t_s ...