const限定符

点点圈 提交于 2020-02-06 04:52:01

希望定义一个变量,它的值不能被改变,用关键词const对变量的类型加以限定:

const int bufSize = 512;//输入缓存区大小

bufSize定义成一个常量,任何试图为bufSize赋值的行为都将引发错误:

bufSize = 512;            //错误:试图向const写值

因为const对象一旦创建后其值就不能改变,所以const对象必须初始化

const int i = get_size();//正确:运行时初始化
const int j = 42;//正确:编译时初始化
const int k;//错误:k是一个未经初始化的常量

初始化和const

在不改变const对象的操作中还有一种初始化,如果利用一个对象去初始化另外一个对象,则它们是不是const都无关紧要

int i = 42;
const int ci = i;//正确,i的值拷贝给了ci
int j = ci;//正确:ci的值拷贝给了j

当以编译时初始化的方式定义一个const对象时,就如对bufSize的定义一样:

const int bufSize = 512;//输入缓存区大小

编译器将在编译过程中把用该变量的地方都替换成对应的值,编译器会找到代码中所有用到bufSize的地方,然后用512替换。

如果程序包含多个文件,则每个用了const对象的文件都必须能访问到它的初始值才行,必须在每一个用到变量的文件中都有对它的定义,同时避免对同意额变量的重复定义,默认情况下,const对象被设定为仅在文件内有效,当多个文件出现同名的const变量时,其实等于在不同的文件中分别定义了独立的变量

只在一个文件中定义const,而在其他多个文件中声明并使用它:

对于const变量不管是声明还是定义都添加extern关键词

//file_1.cc定义并初始化了一个常量,该常量能被其他文件访问
extern const int bufSize = fcn();
//file_1.h头文件
extern const int bufSize;//与file_1.cc中定义的bufSize是同一个

file_1.cc定义并初始化了bufSize,这条语句包含了初始值,所以是一次定义。bufSize是一个常量,必须用extern加以限定使其被其他文件使用。

如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键词。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!