zoukankan      html  css  js  c++  java
  • 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++编程》
  • 相关阅读:
    浅谈localStorage和sessionStorage的相关用法
    v-for中:key的作用总结
    textarea的placeholder无效问题解决
    6月10日
    6月9日
    6月8日
    6月7日
    6月6日
    10月5日
    6月4日
  • 原文地址:https://www.cnblogs.com/dahai/p/2825248.html
Copyright © 2011-2022 走看看