CONST限定符
1.const限定符简介
const int bufSize = 512;//输入缓冲区大小
这样就把bufSize定义成了一个常量,任何试图改变这个变量的操作都会报错
bufSize = 512;//错误,试图向const对象写值
因为const修饰的对象一旦创建后就不能再改变,所有const对象必须初始化.
编译器将在编译过程中把用到const变量的地方都替换成对应的值,即编译器会找到代码中的bufSize并用512替代
为了执行上述替换,编译器必须知道const变量的初始值,如果程序包含多个文件,则每个用了const对象的文件都必须能访问到它的初始值,要做到这一点,就必须在每一个用到该变量的文件中对它定义,为了支持这一用法,同时避免对同一变量的重复定义,默认情况下const变量被设置为仅在文件内有效,当多个文件中出现了同名的const变量时,其实是在不同文件中分别定义了独立的变量.
当我们需要这种变量在文件间共享,而不是为每个文件分别生成独立的变量,也就是说,只在一个文件中定义const,而在其他文件中声明并使用它
解决方法:使用extern关键字
//file_1.cpp定义并初始化一个常量,并声明该常量可以被其他文件访问
extern const int bufSize = fcn();
//file_1.h
extern const int bufSize;//与上面提到的bufSize是同一个
2.const的引用
可以把引用绑定到const对象上,就像绑定到其他对象一样,即对常量的引用,与普通引用不同的是,对常量的引用不能用作修改它绑定的对象
const int ci =1024;
const int &r1 = ci;//正确,引用及其对应的对象都是常量
r1 = 42;//错误,r1是对常量的引用
int &r2 = ci;//错误,试图让一个非常量引用指向一个常量对象
初始化和对const的引用
引用的类型必须与其所引用对象的类型一致,但是有两个例外
一是初始化常量引用时允许使用任意表达式作为初始值,允许一个常量引用绑定到非常量的对象
int i