const常量
1、声明时初始化 ,之后就不能再被改变 const int i;
2、指针常量和常量指针:
       const int * p; p所指的内容不能被改变
       int * const;p地址不能被改变
      判别:以*为分界线,const在左边则数据为常量,const在右边则指针为常量
3、参数为常量:void f(const int  p);表示P不能被改变
     例如:void f(const int p){
                       int & m=p;
                      m++;//错误,m为p引用,和p表示同一个数据,不能改变
                       }
4、返回值为常量:const int f();此时返回值不能为左值被修改。
      f()=6;//!!错误,返回常量,不能被修改
5、const指针不能赋给非常量指针,防止被修改
6、常量对象 const X obi;常量对象只能访问常量成员方法。
7、常量函数 void  f() const;此时函数不能修改类中的成员,除非使用mutable修饰。对于6中的情况可以有 obj.f();
8、valitile 防止编译优化,表示数据不能被程序修改,但可能被外部程序修改
9、引用和指针的区别:
      引用是别名,int i;int &m=i;m和i表示同一内容,引用不能为空,必须被初始化
      指针:是一个指向地址的变量,可以是不同的值,所以可以不初始化,使用之前要检查  。