C++中const用法小结

2020-01-06 15:01:40刘景俊
C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。  

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仍然是常量引用。