const在C++中使用十分广泛,不同位置使用的意义也不尽相同,所以想写篇文章对其做一个总结。
首先,明确const是“不变”这个基本意义,但是不变不意味着什么都不变,下面将会看到。
1. const与变量
基本原则:const变量(对象)不能被修改
const在变量中的引入和魔数有关,所谓“魔数”指的是突然出现的一个常量值(也叫字面值常量)。
for(int i = 0; i < 512; i++)
{
// todo
}
上例中,512即为魔数,512突然出现在循环中,令人不能得知其意义,所以引入const。
const int length = 512;
for(int i = 0; i < length; i++)
{
// todo
}
这样就知道循环是在长度范围内。
1.1 const修饰一个变量(或者说对象),使其变成一个常量,表示该变量的值无法再被修改,正因为如此,所以定义一个常量的时候,必须初始化。
1.2 const常量的作用域:
我们知道,在全局作用域内声明一个变量(此处特指非const修饰的变量),其作用于整个程序,在其他文件中也能被引用,原因是在全局作用域声明一个变量,默认是extern修饰的。
在全局作用域内声明一个const变量,默认不是extern修饰,所以其只能作用于本文件内,若要在其他文件中访问,需要显式声明为extern
2. const与引用
基本原则:const引用是指向const变量(对象)的引用
const int ival = 1024;
const int &refVal = ival;
2.1 const引用可以指向一个相关类型(不是本类型)的const变量
double dval = 3.14;
const int &refVal = dval;
编译器将double转换成一个临时的int对象,然后让const引用绑定到这个临时对象,所以改变dval的值不会改变refVal,也就是说dval仍然是非const变量,refVal仍然是常量引用。










