很多引用自c++ primer一书
比如有时候需要将一个文本中的数据复制到另外一个文本。我们需要使用缓冲区,缓冲区的大写我们可以自己来决定比如1024个字节,这是一个常量,我们使用bufSize = 1024.
但是buferSize对象本身是一个变量。所以我们可以引入const限定符,它将一个对象转化为常量。
const int bufSize = 1024
定义bufSize常量并初始化为1024,而且在定义后就不能修改所以必须初始化
(【这里再提一个别的问题定义和初始化是什么?以及初始化和赋值之间的区别?这里不是重点】
定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中变量有且仅有一个初值。
初始化指的是创建变量并且给它赋初值。赋值则是擦出对象的当前值并用新的值来代替。(这里稍微注意就行不用太过纠结))
const变量默认为文件的局部变量
file1.c
int counter; //定义
file2.c
extern int counter ;//至于要声明就可以在另一个文件中使用file1.c中的变量
counter++;
与其他变量变量不同,除非特别声明,在全局作用域声明的const变量是定义该对象的文件的局部变量,即不能通过file1的counter在file2.c中引用。
但是用extern修饰就可以了
例如:
file1.c
extern const counter = fcn();//counter 定义为extern
file2.c
extern const counter ;
const 引用
const 引用是指向const对象的引用。
什么是引用?
引用就是对象的另一个名字
引用必须用该引用同类型的对象进行初始化
int ival =1024;//一定要初始化
int &refVal = ival;
需要注意的是作用在引用的所有操作实际上都是作用在引用所绑定的对象上
refVal += 2
相当于 ival加2;
const int ival = 1024;
const int &refVal = ival;//正确,用对象进行初始化
int &ref = ival//错误,ref不是const引用,可以通过ref改变ival的值这是不被允许的。
const引用是指向const对象的引用
值得注意的是:
int i= 42
const int &r1 = 42; //这里引用绑定的对象是谁呢??
const int &2 = r+i;
而对于非const的引用是不合法的。
这里提出一个问题如果将引用绑定到不同类型会怎么样
double a = 3.04;
const int &b = a;
(编译器做的事情生成一个中间变量 int temp = a; const int &b = temp )
如果是一个非const类型的引用那么我们改变b的值,实际上改变的是中间变量的值而a的值并没有改变这一点值得注意。
小结:
首先使用const限定符的对象值不能改变而且必须初始化。
其次在两个文件中如果你使用const限定符定义的对象要在另一个文件中引用,必须用extern
const引用可以初始化不同类型的引用或者初始化为又值
非const引用只能绑定在与该引用同类型的对象上。
新手一枚,才疏学浅。第一次写博客有疏失的地方请大家提出,谢谢。