枚举类型和数组的区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举类型和数组的区别?相关的知识,希望对你有一定的参考价值。
RT
老师说 枚举是--为不可分的整数值提供便于记忆的符号.什么意思呢?
enum
exp
action_1
=
1,
action_2
=
2,
action_3
=
3,
...
这么写,只是为了让程序更加易懂,你直接在code里写1,2,3,也完全没错,计算机是无所谓的,但是看的人要蛋疼无比了。人家看到action_1,就知道这里是要这样做,其实对于计算机,那里就是1.
至于指针和数组,关系就很大了。
但是指针比数组更灵活,因为它是一个变量。数组其实也是指针,但是是一个常量指针。
比如,int
*p
arr[5];
p
=
null;
p=
0x00012345;
p
=
arr;
对于p你可以这么操作。
但是arr,你只能
arr[0],arr[1],即用里面的值,但是你不能arr
=
p,这是错的,因为数组名是一个常量指针。 参考技术A 举个例子吧,比如说
enum colorblack,white,red,blue,green;
1.计算机在处理的时候,实际上black=0,white=1,red=2,blue=3,green=4;
这些类似于#define black 0
只是用black代表了0而已。
2.为什么说不可分呢,一般情况下3=1+2,但是blue不等于white+red;所以这些代表用的符号虽然实际上是整数,但是不能像一般整数那样拆分。
3.继续:
color color1;
color1=white;
上面定义的color是一个类型名(像int、float那样是类型名),可以定义变量,color1是这种类型的一个变量,它等于white,实际上计算机处理的时候它就等于1,这是由enum color的定义决定的。本回答被提问者采纳 参考技术B 区别大了
枚举中相当于一组常量的定义,而枚举类型的变量只能在这些值中取一个,一般来说枚举类型的值是整形,但是如果要赋给一个整形变量最好经过强制转换
数组定义的是一组相同类型的变量集合
C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)
参考文章2:为什么要用枚举以及c++11强枚举与c++98弱枚举的区别★★★★★
在C++98枚举(弱枚举)中,枚举类型是不限定作用域的(unscoped enumeration),枚举中的成员可不加命名空间限定符随意使用,但是不限定作用域的做法总是充满危险的,就上例而言,我们无法保证在当前命名空间是否不存在与ImageResolution相对应的CameraResolution枚举类型,其同样包含有成员HIGH, HIGH_2K, HIGH_4K中的一个或多个,若真的包含,很可能在不知觉中被调用者混淆——更让人难过的是,调用者可能并没有料到如此。这种场景在使用第三方库的情况下更为严重。因为传统枚举总是默认可以被隐式地转化为int类型,在不知不觉中就进行了跨作用域的类型转换。
c++11的强枚举类型enum class或enum struct是安全的!
注意:c++11枚举体的声明和定义使用 enum class或是enum struct, 二者是等价的
文章目录
C语言和C++语言都提供了枚举类型,两者是有一定区别. 我们接下来通过代码进行演示:
1. C语言中 enum
main.c
#include <stdio.h>
int main()
enum Week Mon, Tue, Wed, Thi, Fri, Sat, Sun ;
enum Other One, Two, Three ;
enum Week week = Mon;
// 1. 允许非枚举值赋值给枚举类型, 允许其他枚举类型的值赋值给当前枚举类型
week = 100; //ok
week = One; //ok
// 2. 枚举值具有外层作用域,容易造成名字冲突
//int One = 100; //error //错误 C2365 “One” : 重定义;以前的定义是“枚举数”
// 3. 不同类型的枚举值可以直接比较
if (week == One)
printf("equal\\n"); //equal
return 0;
其中第二种情况错误提示如下:
2. C++中 enum
main.cpp
#include <iostream>
using namespace std;
int main()
enum Week Mon, Tue, Wed, Thi, Fri, Sat, Sun ;
enum Other One, Two, Three ;
enum Week week = Mon; //警告 C26812 枚举类型“main::__l2::Week”未设定范围。相比于 "enum",首选 "enum class" (Enum.3)。
// 1. C++ 只能允许赋值枚举值
// week = 100; //error
// week = One; //error
// 2. 枚举元素会暴露在外部作用域,不同的两个枚举类型,若含有相同枚举元素,则会冲突
//enum OtherWeek Mon ; //error,重定义,以前的定义是枚举数
// 3. C++ 只允许同枚举类型值之间比较(作者说得貌似不对,能够比较!)
enum E1 A, B ;
enum E2 C, D ;
cout << (E1::B == E2::D ? "相等" : "不相等") << endl; //相等
return 0;
3. C++中的 enum class(强枚举类型)(强枚举类型禁止不同枚举类型之间进行比较)
#include <iostream>
using namespace std;
int main()
enum class E1 A = 1, B = 2 ;
enum class E2 A = 1, C = 2 ;
// 1. 强枚举类型不会将枚举元素暴露在外部作用域
cout << (int)(E1::A) << endl; //1
int A = 100;
// 2. 不相关的两个枚举类型不能直接比较,编译报错
//cout << (E1::B == E2::C ? "相等" : "不相等") << endl; //error //E0349 没有与这些操作数匹配的 "==" 运算符
//cout << (E1::B == 2 ? "相等" : "不相等") << endl; //error E0349 没有与这些操作数匹配的 "==" 运算符
return 0;
总结
-
C 枚举类型支持不同类型枚举值之间赋值、以及数字赋值、比较,并且具有外层作用域。
-
C++ 中枚举不允许不同类型的值给枚举类型变量赋值,但仍然支持不同类型之间枚举进行比较,枚举符号常量具有外层作用域。
-
C++ 强枚举类型不允许不同类型之间的赋值、比较,枚举常量值并不具有外层作用域。
以上是关于枚举类型和数组的区别?的主要内容,如果未能解决你的问题,请参考以下文章
枚举类型 typedef enum....; enum....; 这两个的区别
C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)
C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)
C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)