C++中enum的用法

如果定义枚举的时候没有定义枚举名,那么这个定义的作用是不是就和#define是一样的?比如:enum{A=0,B=1,C=2};是否就相当于#defineA0#defin... 如果定义枚举的时候没有定义枚举名,那么这个定义的作用是不是就和#define是一样的?
比如:
enum
{
A = 0,
B = 1,
C = 2
};
是否就相当于
#define A 0
#define B 1
#define C 2
这样的定义?
展开
 我来答
风若远去何人留
推荐于2017-09-10 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450127
专业C/C++软件开发

向TA提问 私信TA
展开全部

enum是C++中的枚举类型,以一系列字符串,来表示整型数字,起到更方便阅读维护代码的效果。

1 enum的定义:

enum 的定义形式如下:

enum enum_name
{
    enum_value1,
    enum_value2,
    ...
    enum_valuen
};

如果没有定义enum变量的需求,enum_name可以省略。

在以上形式下,第一个值,enum_value1, 默认值为0,以下各条分别为上一条加一。

如果要改变enum的第一个值,或enum各个项值不连续,可以写作

enum enum_name
{
    enum_value1= -100,
    enum_value2,
    ...
    enum_valuem = 1234,
    enum_valuem1,
    ...
    enum_valuen
};

其中显式赋值的enum项,实际值就是显式赋值的值。其它项仍遵从上一项加一的原则。

于是在这个例子中,enum_value2 = -99, enum_valuem1 = 1235。


2 enum 变量的定义:

定义一个变量的格式为

enum enum_type var = init_value;

定义一个enum_type为类型的变量var, 并初始化为init_value. 其中=init_value部分可以省略。


3 enum项的使用。

enum各个项使用方法类似于无参宏定义。在需要某值的地方,引用对应项即可。

var = enum_value1;

studyua
2012-06-20 · TA获得超过482个赞
知道答主
回答量:182
采纳率:50%
帮助的人:160万
展开全部
你这个定义完全没有意义啊,枚举是定义一种类型,你可以用这个类型名来定义变量的,比如说你定义的enmu x 你后面直接可以用x来定义变量了,如x a;这样定义的结果就是a的取值只能取A,B,C,,而你里面的0,1,2只是给ABC指定序号而已,和宏定义完全两回事。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BC警长
2012-06-20 · TA获得超过293个赞
知道答主
回答量:99
采纳率:0%
帮助的人:84.1万
展开全部
不是,枚举类型可以用来定义变量,这点上说,它和int差不多,只不过每一个数值被赋予了特殊的含义,这样的好处是不容易出错,也不容易出现魔数,即让人无法理解的各种数字
最常用的好处是限定了数据,避免了类似(0代表失败,1代表成功,却发现数据是2)的情况。
枚举类型可以定义枚举类型变量,而宏不行,甚至于你的那几个宏会影响到正常程序(例如有个变量正好叫A)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fengyecong1233
推荐于2018-09-15 · TA获得超过431个赞
知道小有建树答主
回答量:279
采纳率:100%
帮助的人:169万
展开全部
1、枚举enum的用途浅例
写程序时,我们常常需要为某个对象关联一组可选的属性.例如,学生的成绩分A,B,C,D等,天气分
sunny, cloudy, rainy等等。更常见的,打开一个文件可能有三种状态:input, output和append. 典型
做法是,对应定义3个常数,即:const int input = 1; const int output = 2; const int append =
3; 然后,调用以下函数:bool open_file(string file_name, int open_mode); 比如,open_file("Phenix_and_the_Crane", append);这种做法比较简单,但存在许多缺点,主要的一点就是
无法限制传递给open_file函数的第2个参数的取值范围,只要传递int类型的值都是合法的。当然,这样
的情况下的应对措施就是在open_file函数内部判断第二个参数的取值,只有在1,2,3范围内才处理。

使用枚举能在一定程度上减轻这种尴尬,它不但能实现类似于之前定义三个常量的功能,还能够将这三
个值组合起来成为独一无二的组。例如:enum open_modes {input = 1, output, append}; 以上定义了
open_modes为枚举类型enumeration type。每一个命名了的枚举都是唯一的类型,是一个类型标示器
type specifier。例如,我们可以重新写一个open_file函数: bool open_file(string file_name,
open_modes om); 在open_modes枚举中,input, output, append称为枚举子enumerator, 它们限定了
open_modes定义的对象的取值范围。这个时候,调用open_file函数和之前的方法还是一模一样:
open_file("Phenix_and_the_Crane", append);
但是,如果传递给open_file的第二个参数不是open_modes枚举类型值的话那么编译器就会识别出错误;
就算该参数取值等价于input, output, append中的某个,
也一样会出错哦!例如:open_file("Phenix_and_the_Crane", 1);
2、注意事项
(1. 枚举中每个成员(标识符)结束符是",",不是";", 最后一个成员可省略 ","。

(2. 初始化时可以赋负数, 以后的标识符仍依次加1。

(3. 枚举变量只能取枚举说明结构中的某个标识符常量。

(4.在外部,我们可以对枚举变量进行赋值,不过,得要进行类型转换。

如果我们不进行类型轮换,即如下所示进行赋值: x = 3;是不允许的,如果对X进行赋值,只能对3进行类型转换.即:x = (string)3
那么这样就对了.
如果给x赋的不是一个整形的数,而是一个字符型的,如:x = (string)’a’;那么这时候x的值并不是字符’a’,而是’a’的ASCII码,我们知道,在枚举类型中,各常量的值只能是整形的,所以在对上例会自的将’a’转换成一个整数值.从内存的角度来看来话,其实C/C++中整形和字符型的变量是一样的,它们之间可以互相转换.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hong83210
2012-06-20 · TA获得超过481个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:314万
展开全部
对,差不多。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式