const

const作用
1) 可以定义const常量 const int max = 100
2) 对传入的参数进行类型检查,不匹配进行提示 void f(const int i) { .........}
3) 可以保护被修饰的东西 void f(const int i) { i=10;//error! }
4) 可以很方便地进行参数的调整和修改
5) 为函数重载提供了一个参考 
    void f(int i)       {......} //一个函数
    void f(int i) const {......} //上一个函数的重载
6) 可以节省空间,避免不必要的内存分配
7) 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高

const使用
1) 定义常量
2) 指针使用const
3) 函数中使用const
  const修饰参数 
    a.传递过来的参数在函数内不可以改变     void function(const int var)
    b.参数指针所指向内容为常量不可变       void function(const char* var)
    c.参数指针本身为常量不可变             void function(char* const var)
    d.参数为引用,为了增加效率同时防止修改  void function(const class & var)
  const修饰返回值
4) 类相关const   
    a. const修饰类的成员常量,不能被修改,同时它只能在初始化列表中赋值。

   class A
   { 
       const int nValue;         //成员常量不能被修改
       A(int x): nValue(x) { } ; //只能在初始化列表中赋值
   } 


    b. const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数,也不能调用类中任何非const成员函数,一般写在函数的最后来修饰。
        1) const成员函数不被允许修改它所在对象的任何一个数据成员。
        2) const成员函数能够访问对象的const成员,而其他成员函数不可以。

   class A
   { 
       void function()const; //常成员函数, 它不改变对象的成员变量.                        
      //也不能调用类中任何非const成员函数。
   } 

 
    c. 修饰类对象/对象指针/引用
        1) const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
        2) const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。

   class AAA
   { 
       void func1(); 
       void func2() const; 
   } 
   
   const AAA aObj; 
   aObj.func1(); ×
   aObj.func2(); 正确

   const AAA* aObj = new AAA(); 
   aObj-> func1(); ×
   aObj-> func2(); 正确

 

posted on 2014-10-24 22:29  kangbry  阅读(669)  评论(0编辑  收藏  举报

导航