const,volatile,enum,static

    技术2022-05-20  69

    Const

    1.       const限定符既可以在类型前也可以在类型后

    const int a;int const a;等价

    同理const int * pint const * p等价,都是指向常量的指针

    int * const p才是指向变量的常指针。

    Char * const a[]a是一个常数组,指向的地址不可变,但地址上的内容可变,即a[0]不可变,但a[0][0]可变。

     

    2.       类的成员函数声明后加const表示恒态函数,不能改变类的数据成员,不能调用非const成员函数,相当于this指针是const的。

    同理const对象也不能调用非const成员函数。

    成员变量前加mutable就可以被恒态函数或者const对象访问

     

    3.       Const默认是内部连接的,也就是不能被其它文件访问,要在其它程序中访问必须指定为extern

    定义:extern const int SIZE = 10;

    声明:extern const int SIZE;

    Enum  inline  union  static  类的定义 都是内部连接

     

    4.       Const引用,指向const对象的引用

    Const int x = 1024;

    Const int &r = x;

    引用本身就不能修改所绑定的对象,必须在定义时初始化。

     

    5.  const int a = 1;   int * p = (int *)&a;  *p = 2;   修改了const对象的值

             此时a*p的值不相同,因为编译器会把a替换成1。用volatile关键字可以拒绝优化。

     

    Volatile

    该值可能在程序未监测到的情况下被改变,编译器不能优化

    volatile变量可以是const的,如只读状态寄存器

    volatile变量 不能*p * *p 因为值可能中途改变 要先存下当前值

     

    enum

    enum 枚举名{ 枚举值表 };

             enum weekday{ sun,mon,tue,wed,thu,fri,sat };     值默认从0开始

                       enum weekday a,b,c;

             枚举变量赋值a=sun   如果用数字必须强制类型转换a=(enum weekday)2;

     

    static

    静态全局变量和静态局部变量都在全局数据区分配内存

    静态全局变量和静态函数不能在其它文件中使用(内部连接)

     

    类的静态成员变量不能在类声明中定义  只能在里面声明  然后在外面定义

    声明static int x;  定义int A::x = 0;  (声明时要static 在类声明外定义时不用再加)而静态成员函数两处都可以

             (static const int x = 0;可以在里面初始化,仍要在外面定义)

    静态成员变量访问  a.x        A::x

    静态成员函数没有this指针  所以只能访问静态成员变量和静态函数


    最新回复(0)