题记:
请看下面一段程序:
for(int k=0;k!=100;k++)
{
..........
}
出现两个问题:
- 程序的可读性;
- 程序的可维护性;
首先,比较k与100有什么意义?为什么要跟100比较?100哪里来的?——100就像魔术般凭空冒出来一样,程这样的数为魔数(即:它的意义在上下文中没有体现出来)。
这样一来,导致程序的可读性比较差;
其次,如果此整个程序规模较大,100出现的次数上千上万次,假设要对其做修改,这样修改量绝对大啊!并且很容易出错,导致程序崩溃。这样一来,导致程序的可维护性较差。
解决这两个问题的方法是使用一个初始化为100的对象,即:
int max=100;
for(int k=0;k!=max;k++)
{
..........
}
这样,通过对象名称友好性解决了可读性差的问题;要作修改只需要修改max的值就可以,增强了程序的可维护性。
4.1 const限定符
从上面可以看出,通过定义一个变量来代表一个常数,这样会造成这个常数会被意外修改,而const关键字可以解决这样的问题。
- const可以把一个对象转换成一个常量,如:
const int max=100;//定义max为常量并初始化为100,且max在随后不可更改
注:由于常量是不可更改的,定义时必须被初始化。
const int i,j=100;//编译时出错,因为常量i未被初始化
- 在全局作用域中声明的const变量是该对象在该文件下的局部变量,只能被该文件使用,而不能被该程序的其他文件使用
注:
- 在全局作用域中声明的非const变量,可以被该程序的所有文件使用;
- 要使在全局作用域中声明的const变量被该程序的所有文件使用,可以指定const变量为extern。(即:非const变量默认为extern)
4.2 引用
牢记一点:引用就是对象的别名(俗称:小名),对引用的操作就是对对象的实际操作
如:
int res=5;
int &RRres=res;//这里定义了RRres是对象res的引用
注:引用必须初始化
如果有操作:RRres+=3;则有RRres的值为8,且res的值也为8
关于const引用
- 非const引用只能绑定到与该引用同类型的对象;
- const引用可以绑定到不同但相关的类型的对象或绑定到右值
如:
int temp=4;
int &temp1=8;//错误非const不能绑定到右值,只能绑定到同类型的对象
const int &temp2=8;//正确
const int &temp3=temp+temp3;//正确