代码改变世界

读书笔记:C++ Primer系列(4)—— 关于const限定符

2013-12-18 22:35  Keiven_LY  阅读(312)  评论(0编辑  收藏  举报

题记:

     请看下面一段程序:

     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变量是该对象在该文件下的局部变量,只能被该文件使用,而不能被该程序的其他文件使用

注:

  1. 在全局作用域中声明的非const变量,可以被该程序的所有文件使用;
  2. 要使在全局作用域中声明的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;//正确