const限定符

来源:互联网 发布:java 高仿京东商城 编辑:程序博客网 时间:2024/06/03 17:35

const在C++中是作为一种限定符而存在,其主要作用可归纳为以下几点:

1、定义常量,使其具有只读属性,同时可节省空间

如:const int p=22;//代表p是一个值为22的常量

此处定义常量与只读属性并不难理解,可是为什么说其可以节省空间呢?

const 修饰的变量在程序的运行过程中有多个引用的其只生成一份拷贝,该点与c里面的#define  p 22 是有所区别的,#define p 22 相当于将22使用p这个符号进行替代,而编译器会将程序使用到p的地方替换为22进行编译

例如

#define p 22

int j = p;

in i = p;

以上相当于

int j=22;

in i=22;

拷贝了两次

2、警惕防止程序改变其值大小,增强程序健壮性

如:假设我们需要开辟一个固定大小为500的缓存区,定义一个变量bufsize

      const int bufsize = 500;

此时,我们是不希望我们在上下文使用bufsize时被误修改,用const就能很好的起到保护作用

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

4、常量引用(const引用)

int i = 42;

const int &r1 = i;

const int &r2 = 42;

const int &r3 = r1*2;//常量引用

此处使用需要注意

不能

int &r4 = r1*2;

此种做法是非法的,r4是一个普通的非常量引用,而r1是一个常量引用不允许被修改,若是将该式子将r1*2绑定到r4两者类型不一致违反了引用的类型必须与其所引用对象的类型一致原则,当然常量引用的初始化可以是个例外。

常量应用较为典型的应用可以参考C++的拷贝构造函数


const注意事项:

1、编译器会在使用到同一const变量的地方都替换为对应的值;

2、const在模块内有效类似于static 其只有一份拷贝,只在同一个模块内有效,在多文件下,多个文件可以有同名的const变量而其值不同,若是想使const变量在多个文件共享可在增加extern关键字。

 

5、const指针

const int *p=null;//一个指向整型常量的指针指针所指向的对象内容不可更改

int *const p=null;//指向整型数的常量指针,指针不可改变

int const *p=null;//指向整型常量的指针,指针指向的对象内容不可改变

const int *const p = nul;//指向常量的常量指针,指针与所指对象均不可改变

int const *const p = null;//指向常量的常量指针,指针与所指对象均不可改变

 

0 0
原创粉丝点击