enum枚举
C++继承C的枚举用法
(1)典型枚举类型定义,枚举变量定义和使用
(2)枚举类型中的枚举值常量不能和其他外部常量名称冲突:
举例1宏定义,举例2另一个枚举
// 定义一个名为Color的枚举类型
enum Color {RED, // 红色,默认值为0GREEN, // 绿色,默认值为1BLUE // 蓝色,默认值为2
};// 声明一个枚举变量并赋值Color myColor = RED;// 使用switch语句来处理不同的枚举值switch (myColor) {case RED:cout << "The color is red." << endl;break;case GREEN:cout << "The color is green." << endl;break;case BLUE:cout << "The color is blue." << endl;break;default:cout << "Unknown color." << endl;break;}// 输出枚举的整数值cout << "The integer value of RED is: " << RED << endl;cout << "The integer value of GREEN is: " << GREEN << endl;cout << "The integer value of BLUE is: " << BLUE << endl;
C++11中扩展的枚举
(1)enum class enumType:valueType{one=xx, two, three};
(2)两种简写
(3)解决2个枚举中的重名问题,但是宏定义仍然不能重名
强类型枚举(Scoped Enumerations)
强类型枚举使用enum class关键字定义,它们是强类型的,不能隐式转换为整数,并且枚举成员必须使用枚举类型名进行限定。
简化写法1:
// 定义一个强类型枚举Color
enum class Color {RED,GREEN,BLUE
};
简化写法2:
enum Color {RED,GREEN,BLUE
};
完全写法:
// 定义一个基于整型的枚举Color
enum class Color1 : uint8_t {RED,GREEN,BLUE
};int test() {// 声明一个基于整型的枚举变量并赋值Color1 myColor1 = Color1::RED;// 使用switch语句来处理不同的枚举值switch (myColor1) {case Color1::RED:cout << "The Color1 is red." << endl;break;case Color1::GREEN:cout << "The Color1 is green." << endl;break;case Color1::BLUE:cout << "The Color1 is blue." << endl;break;default:cout << "Unknown Color1." << endl;break;}// 强类型枚举不能直接转换为整数,需要显式转换cout << "The integer value of Color1::RED is: " << static_cast<int>(Color1::RED) << endl;cout << "The integer value of Color1::GREEN is: " << static_cast<int>(Color1::GREEN) << endl;cout << "The integer value of Color1::BLUE is: " << static_cast<int>(Color1::BLUE) << endl;return 0;
}
static_cast 是 C++ 中的一种类型转换操作符,用于将一个表达式的值从一种类型强制转换为另一种类型。在这种情况下,它通常用于将某个对象或表达式从一个基类转换为它的派生类,或者是将一个非特定类型的值转换为整型(int)。static_cast 保证了转换的准确性和效率,因为它不需要运行时的动态检查,而是在编译时完成。
关于枚举的3个小细节
(1)枚举类型和值类型的互相转换,枚举类型是否可以++
(2)枚举类型的前置声明
(3)枚举类型超出范围访问是否会编译时或运行时报错
/ 前置声明
enum class Color1 ; // 声明 Color1 类型,但不提供具体定义
共用体union
C语言中union回顾
(1)union翻译成共用体更合适,而不是联合、联合体
(2)union中所有成员是多选一的关系,这是union和struct的最大差别
(3)union的典型用法是测试大小端,面试笔试常考,必须掌握
C++中union和C中不同
(1)C++中union类型定义后使用时可以省去union(和上节enum时一样)
(2)C++中union里成员除了普通的,还可以是对象,但是对象不能包含自定义构造函数、析构函数,简单说就是不能太复杂
(3)C++中经常用到匿名union,一般是内置在class内部做成员变量
匿名union:
union
{char *p1;int *p2;
}m1; // 直接定义了union变量m1
#include <iostream>
using namespace std;// 定义一个联合类型
union Data {int i;float f;char str[20];
};int main() {// 声明一个变量Data data;// 存储整数data.i = 10;cout << "data.i = " << data.i << endl;// 存储浮点数data.f = 220.5;cout << "data.f = " << data.f << endl;// 存储字符串strcpy(data.str, "Hello, World!");cout << "data.str = " << data.str << endl;// 注意,由于union的所有成员共享同一块内存,// 存储一个成员的值会覆盖之前存储的其他成员的值cout << "After storing str, data.i = " << data.i << endl;cout << "After storing str, data.f = " << data.f << endl;return 0;
}
总结
知道枚举的使用方法,强类型枚举(Scoped Enumerations)
知道共用体union的使用方法
学习记录,侵权联系删除。
来源:朱老师物联网大课堂