我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?
sizeof(enum)== sizeof(int),总是吗?
通常的做法是什么?如果我必须通过网络传输这些返回类型,并且必须在另一端完成某些处理,那么您更喜欢枚举/ #define/const ints.
编辑 - 只是检查网络,因为编译器不象征性地链接宏,人们如何调试,比较整数值与头文件?
来自答案 - 我在下面添加这一行,因为我需要澄清 -
"因此它是实现定义的,而sizeof(枚举)可能等于sizeof(char),即1."
众所周知,C++中的内置枚举不是类型安全的.我想知道实现类型安全枚举的哪些类在那里使用...我自己使用以下"自行车",但它有点冗长和有限:
typesafeenum.h:
struct TypesafeEnum
{
// Construction:
public:
TypesafeEnum(): id (next_id++), name("") {}
TypesafeEnum(const std::string& n): id(next_id++), name(n) {}
// Operations:
public:
bool operator == (const TypesafeEnum& right) const;
bool operator != (const TypesafeEnum& right) const;
bool operator < (const TypesafeEnum& right) const;
std::string to_string() const { return name; }
// Implementation:
private:
static int next_id;
int id;
std::string name;
};
Run Code Online (Sandbox Code Playgroud)
typesafeenum.cpp:
int TypesafeEnum::next_id = 1;
bool TypesafeEnum::operator== (const TypesafeEnum& right) const
{ return id == right.id; }
bool TypesafeEnum::operator!= …Run Code Online (Sandbox Code Playgroud) 对于定义样式的示例,枚举和#define似乎能够做同样的事情.理解#define是编译器预处理器的宏替换.有什么情况比另一个更受欢迎吗?
typedef enum {
SelectionStyleNone,
SelectionStyleBlue,
SelectionStyleRed
} SelectionStyle;
Run Code Online (Sandbox Code Playgroud)
VS
#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED 2
Run Code Online (Sandbox Code Playgroud) 当我学习C时我学会了枚举,并不时地提醒自己,并且大部分时间通过从某些来源重新阅读,我发现这是因为我从未在编程中使用它,我的编程兴趣集中在算法问题解决上,所以我不确定在哪里可以使用枚举.
有人可以提出一些很好的例子,使用枚举可以让事情变得简单吗?
我会赞赏算法示例,但欢迎算法或非算法示例.
我读过有关该主题的几个问题:
我知道在宏上通常首选#define枚举,以获得更好的封装和/或可读性。另外,它允许编译器检查类型以防止出现某些错误。
const声明介于两者之间,允许类型检查和封装,但更混乱。
现在我在内存空间非常有限的嵌入式应用程序中工作(我们经常必须争取字节节省)。我的第一个想法是常量比枚举占用更多的内存。但我意识到我不确定常数将如何出现在最终固件中。
例子:
enum { standby, starting, active, stoping } state;
Run Code Online (Sandbox Code Playgroud)
在资源有限的环境中,enumVS#define与 VSstatic const在执行速度和内存占用方面如何比较?
打字稿中枚举的用途是什么。如果它的目的只是为了使代码可红,我们就不能为了同样的目的使用常量吗?
enum Color {
Red = 1, Green = 2, Blue = 4
};
let obj1: Color = Color.Red;
obj1 = 100; // does not show any error in IDE while enum should accept some specific values
Run Code Online (Sandbox Code Playgroud)
如果没有typechecking的优势,难道就不能这么写。
const BasicColor = {
Red: 1,
Green: 2,
Blue: 4
};
let obj2 = BasicColor.Red;
Run Code Online (Sandbox Code Playgroud) enums ×6
c ×4
c++ ×2
enumeration ×2
c++03 ×1
const ×1
embedded ×1
objective-c ×1
type-safety ×1
typescript ×1