c++ const关键字

  1. Const修饰成员变量

(1) Const修饰普通类型的变量,在定义时初始化。

  ① Const int num1 = 1024,此时num1的值不能再被修改。通常需要在定义时进行初始化。

(2) Const修饰指针变量

  ① const修饰指针指向的内容,则内容为不可变量。

    如果只有一个const,位于*的左侧:表示指针所指的数据是常量,不能通过该指针修改实际数据。指针本身是变量,可以指向其他的内存单元。

    Const int * ptr1_num1 = &num1;

    Int const* prt2_num1 = &num1;  

    这两种写法是等价的,

    Ptr1_num1 = &num2;//合法,因为可以把ptr1_num1指向其他其他内存单元

    *ptr1_num1 = 1234//不合法 ,因为不能修改指针指向内存单元的数据。

  ② Const修饰指针,则指针为不可变量

    如果只有一个const,位于*的右侧:表示指针不能指向其他内存单元,所指向的数据可以修改。

    Int * const ptr2_num1 = &num1;

    Ptr2_num1 = ptr1_num1//不合法,不能修改指针指向的内存地址。

    *ptr2_num1 = 1234//合法

  ③ 如果有两个const位于*的左右侧,表示指针和指针所指向的数据都不能修改

    int a = 8;const int * const  p = &a;

2.Const修饰函数参数

  (1) Const可以修饰形参,值传递。

     Void function(const int var)

    表明参数var,在函数内部不能改变他的值。因为函数修改形参的值并不会改变实参的值,所以一般不需要const修饰。

  (2) Const修饰引用类型的参数时,不能修改引用对象的任何成员,只能调用const修饰的成员函数,好处是引用传递不需要一个新的参数副本(节省效率)。  

    Void constest(const Computer & mycomputer){

      //参数为computer类型的mycomputer对象。不能修改mycomputer的任何成员变量。

    }

3.Const修饰返回值

  使用const修饰引用类型的一个常见的原因是:提高效率。

  如果不加const,程序会返回一个复制的引用地址,如果加了const,地址是固定的,唯一的不变的,并且效率更高。

  总结:在可以返回一个对象,也可以返回一个对象的引用时,应该首选引用,使用const更加有效率。

4.const修饰类

  (1) Const修饰成员变量  

    表示成员变量不能被修改,同时只能在初始化列表中赋值

  (2) Const修饰成员函数  

    ① 目的是防止成员函数修改被成员变量的值。

      Void  function const{}  

    ② 如果const成员函数想修改成员变量的值,用mutable关键字修饰成员变量。

      class Test

      {

        public:

            Test(int _a,int _b):_ca(_a),_cb(_b){}

            void add()const

            {

                ++_ca; // 错误

                ++_cb; // 正确 因为cb用mutable修饰了。

            }

       private:

            int _ca;

            mutable int _cb;

      };

    ③ Const不能修饰构造函数,因为构造函数要修改类的成员变量。

    ④ Const不能修饰static静态成员函数。

      成员函数中const是用来修饰this指针的,意味着this指向的内容不可变。this指针是某个具体对象的地址。Static静态成员是属于类的,所有对象共用static成      员,不属于某个具体的对象,所以static成员函数没有this指针,所以const不能修饰静态成员函数。

  (3) Const修饰类对象

    ① 对象的任何成员都不能被修改

    ② 只能调用const成员函数

5.Const类型变量可以通过类型转换符const cast将const类型转换成非const类型。

posted @ 2020-08-05 10:25  毛毛吃火锅不要锅  阅读(121)  评论(0编辑  收藏  举报