在C++中,对枚举类型的哪些操作是合法的
What operations on enumeration types are legal in C++?
这个问题让我抓狂。我需要把它做好,这样我才能通过我的课。感谢所有的尝试。
用C++编写一个简单的程序来研究其枚举类型的安全性。对枚举类型至少包括10种不同的操作,以确定哪些不正确或愚蠢的事情是合法的。
这里有一个完全可操作的程序,它显示了使用枚举的十种不同类型的操作。详细信息将在代码中,参考资料将在帖子底部。
首先,了解什么是枚举是非常重要的。有关这方面的参考,请参阅Enumerated Types-enums。在下面的代码中,我使用数学运算、逐位运算符和枚举值将数组初始化为默认大小。
#include <iostream>
using namespace std;
enum EnumBits
{
ONE = 1,
TWO = 2,
FOUR = 4,
EIGHT = 8
};
enum Randoms
{
BIG_COUNT = 20,
INTCOUNT = 3
};
int main(void)
{
// Basic Mathimatical operations
cout << (ONE + TWO) << endl; // Value will be 3.
cout << (FOUR - TWO) << endl; // Value will be 2.
cout << (TWO * EIGHT) << endl; // Value will be 16.
cout << (EIGHT / TWO) << endl; // Value will be 4.
// Some bitwise operations
cout << (ONE | TWO) << endl; // Value will be 3.
cout << (TWO & FOUR) << endl; // Value will be 0.
cout << (TWO ^ EIGHT) << endl; // Value will be 10.
cout << (EIGHT << 1) << endl; // Value will be 16.
cout << (EIGHT >> 1) << endl; // Value will be 4.
// Initialize an array based upon an enum value
int intArray[INTCOUNT];
// Have a value initialized be initialized to a static value plus
// a value to be determined by an enum value.
int someVal = 5 + BIG_COUNT;
return 0;
}
上面完成的代码示例可以用另一种方式完成,即重载EnumBits的运算符|等。这是一种常用的技术,有关其他参考,请参阅如何在C++中使用枚举作为标志?。
关于比特操作的参考,请参阅C和C++中的比特运算符:教程
使用C++11,您可以以其他方式使用枚举,例如强类型枚举。
相关文章:
- 逐位操作的隐式类型转换
- 像union_这样的 Boost.Geometry 操作如何处理浮点类型的基本不精确性?
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 标量类型的特征模板无法编译固定大小的子矩阵操作
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 使用用户定义的操作隐式转换为类型
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 是否有可能具有放入容器的移动操作的类型?
- 在 Fortran 中泛化特定声明类型的操作
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- 对标准类型使用原子操作
- POD 类型的原子按位操作
- CAN模板类型推理考虑原始操作类型转换
- 是浮点操作,导致IEC 559/IEEE 754浮点类类型的无限行为
- STD ::向量迭代器类型和允许的操作
- 从网络应用程序拆包操作类型的正确方式
- 映射平台特定的可互操作类型