希望定义一个变量,它的值不能被改变,用关键词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关键词。
来源:https://www.cnblogs.com/suomeimei/p/10486945.html