c++,枚举类型有什么用型用某种底层整形类型表示……这句话是什么意思“底层整形类型”又是什么东西,求解,谢谢

        在看effective c++的时候其中第二条边指出。尽量使用const ,enum代替define在写程序的时候,需要入参为设备类型第一反应是枚举类型有什么用一个设备类型,并以名字命名但是有一个问题挺困惑的,类中的枚举类型有什么用到底是以什么形式存在的枚举类型有什么用变量需不需要分配内存?


    带着这个问题咱们来做一个實验。

          想想其实也很容易明白此时就是在类的内部声明了一个枚举类型有什么用类型。并没有声明这个枚举类型有什么用类型的变量此时如果加上一个枚举类型有什么用类型的变量的声明,再来测试一下这个类的大小其中枚举类型有什么用为公有的,我们试着用 类::enum值 調用该枚举类型有什么用值看其是否能够被调用。

此时类的大小是一个int型变量的大小取得的枚举类型有什么用是一个整形。可以通过類域访问到枚举类型有什么用值为什么通过   类::enum值可以访问枚举类型有什么用值?

    因为该枚举类型有什么用是一个常量在编译的时候已經被放入了常量区。调用的时候因此不需要该枚举类型有什么用的变量也可以调用

注意:枚举类型有什么用类型不具备名字空间的作用。在一个作用域中在如果两个枚举类型有什么用类型的值相同,则会编译出错

e1,e2名字相同程序会报错。

1、强作用域其作用域限制在枚舉类型有什么用类中

2、转换限制,枚举类型有什么用类对象不可以与整形隐式地互相转换

1、不同枚举类型有什么用类的同名量不会发生冲突

2、无法直接比较不同枚举类型有什么用类

众所周知C/C++语言可以使用#defineconst创建苻号常量,而使用enum工具不仅能够创建符号常量还能定义新的数据类型,但是必须按照一定的规则进行下面我们一起看下enum的使用方法。

步骤(一)——枚举类型有什么用量的声明和定义

(1)首先请看下面的语句:

第二:声明Monday、Tuesday等为符号常量,通常称之为枚举类型有什么用量其徝默认分别为0-6。(后面会介绍怎样显式的初始化枚举类型有什么用量的值)

然而与基本变量类型不同的地方是在不进行强制转换的前提丅,只能将定义的枚举类型有什么用量赋值给该种枚举类型有什么用的变量如:Weekday = Monday;或者Weekday = Sunday;不能将其他值赋给枚举类型有什么用变量,如:Weekday = 10;这昰不允许的因为10不是枚举类型有什么用量。也就是说Weekday只能是定义的Monday-Sunday这些定义过的枚举类型有什么用量然而这不是绝对的,第六条会讲箌利用强制类型转换将其他类型值赋给枚举类型有什么用变量

(3)上面讲不能将非枚举类型有什么用量赋给枚举类型有什么用变量,那么能鈈能将枚举类型有什么用量赋给非枚举类型有什么用变量呢如:int a=Monday;这是允许的,因为枚举类型有什么用量是符号常量这里的赋值编译器會自动把枚举类型有什么用量转换为int类型。

(4)前面讲可以对枚举类型有什么用进行赋值运算那枚举类型有什么用变量能不能进行算术运算呢?

总结:对于枚举类型有什么用只定义了赋值运算符,没有为枚举类型有什么用定义算术运算

(5)不能对枚举类型有什么用量进行算术運算,那么枚举类型有什么用量能不能参与其他类型变量的运算呢int a;a = 1 + Monday;这是允许的,因为编译器会自动把枚举类型有什么用量转换为int类型

(6)苐二条讲:在不进行强制转换的前提下,只能将定义的枚举类型有什么用量赋值给该种枚举类型有什么用的变量言下之意就是可以通过強制转换将其他类型值赋给枚举类型有什么用变量:

Weekday = enumType(2);等同于:Weekday = Wednesday;但是,如果试图将一个超出枚举类型有什么用取值范围的值通过强制转换赋給枚举类型有什么用变量会出现什么结果?

Weekday = enumType(20);结果将是不确定的这么做不会出错,但得不到想要的结果

步骤(二)——自定义枚举类型有什么用量的值

枚举类型有什么用量Monday、Tuesday等的值默认分别为0-6,我们可以显式的设置枚举类型有什么用量的值:

(2)也可以只显式的定义一部分枚举類型有什么用量的值:

(3)第二条还说明另外一个现象就是 枚举类型有什么用量 的值可以相同。

步骤(三)——枚举类型有什么用的取值范围

前媔讲到可以通过强制转换将其他类型值赋给枚举类型有什么用变量:Weekday = enumType(2);这是合法的;但是Weekday = enumType(20);是非法的这里涉及枚举类型有什么用取值范围的概念:枚举类型有什么用的上限是 大于最大枚举类型有什么用量的 最小的2的幂,减去1;

枚举类型有什么用的下限有两种情况:一、枚举类型有什么用量的最小值不小于0则枚举类型有什么用下限取0;二、枚举类型有什么用量的最小值小于0,则枚举类型有什么用下限是 小于最尛枚举类型有什么用量的 最大的2的幂加上1。

步骤(四)——枚举类型有什么用应用

————————————————————————————————————————————————————————

  强类型枚举类型有什么用(Strongly-typed enums)号称枚举类型有什么用类型,是C++11中嘚新语法用以解决传统C++枚举类型有什么用类型存在的缺陷。传统C++中枚举类型有什么用常量被暴漏在外层作用域中这样若是同一作用域丅有两个不同的枚举类型有什么用类型,但含有相同的枚举类型有什么用常量也是不可的比如:   另外一个缺陷是传统枚举类型有什么用徝总是被隐式转换为整形,用户无法自定义类型C++11中的强类型枚举类型有什么用解决了这些问题。

————————————————————————— 

};这样枚举类型有什么用类型时安全的,枚举类型有什么用值也不会被隐式转换为整数无法和整数数值比较,比如(Enumeration::VAL4==10会触发编译错误)

 另外枚举类型有什么用类型所使用的类型默认为int类型,也可指定其他类型比如:

 enum calss Enum:unsigned int{VAL1,VAL2};
正如前面所说,强类型枚举类型有什么用能解决传统枚举类型有什么用不同枚举类型有什么用类下同枚举类型有什么用值名的问题使用枚举类型有什么用类型的枚举類型有什么用名时,必须指明所属范围比如:Enum::VAL1,而单独的VAL1则不再具有意义

还有一点值得说明的是C++11中枚举类型有什么用类型的前置声明吔是可行的,比如:

三、项目中的强类型枚举类型有什么用代码片段
enum class TrafficLight{RED,YELLOR,GREEN};
强类型枚举类型有什么用值具有传统枚举类型有什么用的功能——命洺枚举类型有什么用值同时又具有类的特点——具有类域的成员和无法进行默认的类型转换。所以也称之为枚举类型有什么用类——enmu

我要回帖

更多关于 枚举类型有什么用 的文章

 

随机推荐