Const总结

最低权限原则是良好软件工程的最基本原则之一。使用const的好处:
1. 使用const,可以避免因为疏忽而错误地修改变量。
2. 使用const,能提高性能。编译器能够对const变量进行某些优化。
总之,use it whenever you need it。

 

const的使用情况,分三种:
1. const变量
(1) const变量
      例1:const int i = 5;       // int类型的变量i值为5,不可修改
      例2:int i = 5;
              const int *p = &i;  // 不能通过指针p来修改它指向的内容
              *p = 6;                  // error!
              p = NULL;             // OK!
              i = 6;                    // OK!
      例3:int i = 5;
              int* const p = &i; // 指针p是const的,不可修改的
              *p = 6;                 // OK!
              p = NULL;            // error!
      例4:int i = 5;
              const int* const p = &i; // 不能通过p修改它指向的内容;不能修改p的指向
      小技巧:const在*号左边,则不能通过指针修改它指向的内容;
                  const在*号右边,则不能修改指针的指向。
      注意:const变量在声明时要初始化;
              不可以调用const对象的非const函数;
(2) const成员变量
      const成员变量,一定要初始化,且一定要在初始化列表中初始化。
      class A
         {
         public:
               A(int i) : m_i(i) {}
         private:
               int m_i;
         };
(3) const参数
      如果参数是指针,且仅作为输入参数,则应声明为const,避免被修改。
          void f(const int *p)
          {
               *p = 5;          // error!
               int i = *p;
               i = 5;             // OK!
          }

          void main()
          {
               int i = 0;
               f(&i);
          }
      如果参数按引用传递,且仅作为输入参数,则应声明为const,避免被修改。
          void f(const int& i)
          {
                i = 5;            // error!
                int k = i;
                k = 5;           // OK!
           }

           void main()
           {
                int i = 0;
                f(i);
           }
       如果参数是作为输出参数,则不应该声明为const。
       如果参数不是按引用传递,且不是指针,虽然能声明为const,但没有意义。因为会为参数生成一个新的临时对象,即使修改参数,只是修改的这个临时对象而已。
(4) const返回值
        同const参数。
2. const成员函数
       const成员函数中,不可以修改成员变量,mutable成员变量除外。
          class A
              {
               public:
                     A() : i(5), k(7) {}
                    void f() const
                    {
                          i++;      // error!
                          k++;     // OK!
                    }
              private:
                    int i;
                    mutable int k;
             };

             void main()
            {
                   A a;
            }
      const函数不可以调用非const函数。
      可以调用const对象的构造函数。
        class A
            {
            public:
                A(){i = 10;}
            private:
                int i;
            };

            void main()
            {
                 const A a;
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值