一、const是什么
  在 C/C++ 语言中,const关键字是一种修饰符。所谓“修饰符”,是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码。 const 修饰符而言,它用来告诉编译器,被修饰的这些东西,具有“只读”的特点。在编译的过程中,一旦我们的代码试图去改变这些东西,编译器应该给出错误提示。
  所以,const修饰符的作用主要是利用编译器帮助我们检查自己代码的正确性。我们使用const在源码中标示出“不应该改变”的地方,然后利用编译器,帮助我们检查这些地方是否真的没有被改变过。如果我们不小心去修改了这些地方,编译器会报错,从而帮助我们纠正错误。使用const和不使用const,对于终编译产生的代码并没有影响。
  虽然const对于终代码没有影响,但是尽可能使用const,将帮助我们避免很多错误,提高程序正确率。
  二、const可以修饰哪些对象
  在上面已经提到过了,const是一种修饰符,那它可以作为哪些对象的修饰符呢?下面列举了一些C/C++中用到const的地方。
  1,const变量
  2,const指针
  3,const引用
  4,const类
  5,类的const成员变量
  6,类的const成员函数
  7,const修饰函数的形参与返回值
  下面我们分别讨论上面几种情况下,const的用法。
  三、const与变量
  当一个变量被const修饰后,具有以下几个特点:
  1)该变量只能读取不能修改。(编译器进行检查)
  2)定义时必须初始化。
  3)C++中喜欢用const来定义常量,取代原来C风格的预编译指令define。
  1 const int var; // Error:常量 变量"var"需要初始化设定项
  2 const int var1 = 42;
  3 var1 = 43; // Error:表达式必须是可以修改的左值
  上面代码中第一行和第三行都有错误,注释便是编译器给出的错误提示。
  另外注意,在使用const变量作为数组的下标时,变量的值一定要是一个常量表达式(在编译阶段能计算得到结果)。
1 const int sz = 42;
2 int iAr[sz];
3 const int sz1 = size(); // size()必须是一个返回常量的函数
4 int iAr1[sz1];
5
6 int var = 42;
7 const int sz2 = var;
8 int iAr2[sz2]; // error:sz2只有运行时才知道值