const做用

const有如下几个做用:数组

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

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

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

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

5.为函数重载提供参考对象

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

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

#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. 修饰常引用。

相关文章
相关标签/搜索