C++之const修饰符

  • Use const whenever possible。——《Effective C++》
  • const普通变量:
    1 const int bufSize = 512 //缓冲区大小 
    
    2 const double pi; //错误: 未初始化的常量
  • const指针:
    1 char greeting[] = "Hello";
    
    2 char* p = greeting;//non-const pointer,non-const data
    
    3 const char* p = greeting;//non-const pointer,const data
    
    4 char* const p = greeting;//const pointer,non-const data
    
    5 const char* const p = greeting;//const pointer,const data
  • const函数形参:
    • 对const 指针传递和const引用传递,防止函数内部修改传递数据。const修饰值传递无意义。
      1 void StringCopy(char *strDestination, const char *strSource); 
      
      2 void Func(const A &a);//其中,A为用户自定义的数据类型。
    • 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递” ,目的是提高效率。例如将 void Func(A a) 改为 void Func(const A &a)。
  • const函数返回值:
    • 类似函数形参。
  • const类成员函数:
    • 改善C++程序效率的一个根本办法是使用const引用传递,但是此方法可行的前提是,我们有const成员函数处理取得的const对象(未经修饰的)。
       1 class A
      
       2 {
      
       3 public:
      
       4     int Get() const    {return m_n;};
      
       5 private:
      
       6     int m_n;
      
       7 };
      
       8 
      
       9 void f(const A& a)
      
      10 {
      
      11     int tmp = a.Get();//Get若为非const函数,则无法处理const引用对象!
      
      12 }
    • 任何不会修改数据成员的函数都应该声明为 const 类型。
       1 class Stack 
      
       2 { 
      
       3    public: 
      
       4   void  Push(int elem); 
      
       5   int  Pop(void); 
      
       6   int  GetCount(void)  const; //const 成员函数 
      
       7    private: 
      
       8   int  m_num; 
      
       9   int  m_data[100]; 
      
      10 }; 
      
      11  
      
      12  int Stack::GetCount(void)  const 
      
      13 { 
      
      14   ++ m_num; //编译错误,企图修改数据成员 m_num 
      
      15  Pop();  //编译错误,企图调用非 const 函数 
      
      16  return m_num; 
      
      17  } 
  •  参考:《Effective C++》、《高质量C/C++编程》

你可能感兴趣的:(Const)