static const VS const VS enum

可结合Effective C++(三)笔记:http://blog.csdn.net/moubao/article/details/9191893

const、static const、enum是在C++类中定义常量的几个方法,可以通过static const和enum类型成员变量定义class级别的常量,而const定义的是对象级别的常量

1.const:

const类型成员变量的生命周期及其所处类对象实例的生命周期,在此对象生命周期中,它是一个常量,其初始化只能是在构造函数初始化列表中进行(在构造函数体内能行不?答案是不行滴),不同的对象其const成员变量额值可能不同。

2.enum:

参考链接:http://sharep.blog.51cto.com/539048/114301

类中的枚举常量对于整个类来说都是恒定的,只能把枚举值赋给变量,而不能直接将元素的值赋给变量,如以下代码

enum weekday
{
   sum,mon,tue,wed,thu,fir,sat
}a,b;
a=tue;   //ok
b=1;   //error
cout<

如果一定要将数值赋给枚举变量,那么需要强制转换:

b=(enum weekday)2;

一定谨记enum是常量,不是变量,不能对枚举元素重新赋值,即以下操作时错误的:

sun=5;    //error,sun has inialized as 0

enum不占用类对象的内存空间,它们在编译时全部求值,上例中,sizeof(sun)=sizeof(int)=sizeof(enum weekday),因为weekday中的所有元素都是其实都是int型的,4个字节就可以存储所有enum weekday类型的变量,但是并不是所有情况下的sizeof(enum x)(或sizeof(x))=sizeof(int),事实上sizeof(enum x)=sizeof(some_integer_type),该some_integer_type是可以存储任何枚举元素的类型。

3.static const:

可以在整个类中定义一个常量,在类外定义初始化static const成员变量时,不加static,但是必须得加const,即

class A
{
....
static const int a;
...
}
const int A:: a=3;

static类型成员变量一般不能在类的内部初始化,而只能在类定义体外部定义初始化,但是有一个特殊情况,就是如果初始化式是一个常量表达式,int型的static const成员变量就可以在类的定义体内初始化,此时,不能再在类定义体外定义赋值。

ps:如果声明一个变量为static类型,其实也是在间接指出该变量的作用域是有限的,或者在一个文件里,或者是存在一个块里,此时,extern关键字将不能和该变量一起使用,即如果你在a.cpp中有static int a=2,那么即使在b,cpp中有extern int a,那么后来对a的操作也将通不过编译



你可能感兴趣的:(C++)