const,volatile,enum,static

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指针  所以只能访问静态成员变量和静态函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值