union 是一种比较底层的语言特性,尤其是单片机类编程,或者底层通信接口编程时使用的比较广泛。C++ 并不提倡使用union。
union mydata {
int data;
struct {
int bit1 : 1;
int bit2 : 3;
int reserve: 4;
} mask;
};
这样操作data, 或者操作mask 会同步修改,反之亦然。在以前的C 编程中经常以这种方式使用
匿名union (匿名联合) 是一个对象,而不是一个类型,无须对象明就能访问它的成员
枚举
枚举类型:
enum class: 枚举值名字位于enum 的局部作用欲内,枚举值不会隐式的转换为其他类型
普通enum: 枚举值名字与枚举类型位于同一个作用域中
enum class 类型
enum class Color {red, green, blue};
int color = Color::red; // error: cannot convert ‘Color’ to ‘int’ in initialization
enum class Color_INT: int {red, green, blue};
int color = static_cast<int>(Color::red);
// int color = static_cast<char>(Color::red); 也可以编译通过
enum class Flag : char {x=1, y=2, z = 4, e = 8};
// error: cannot convert ‘int’ to ‘Flag’ in initialization
Flag f0 = 1;
Flag f0 = static_cast<Flag>(0); // compile ok
Flag f0 = static_cast<Flag>(5); // 5 不在Flag 的值定义的范围内,语法上来讲转换结果未定义不推荐