我正在为以下问题寻找一种hacky的解决方案:GCC4.4+接受以下c++0x代码:enumclassmy_enum{value1,value2};允许这样使用:my_enume=my_enum::value1;这带来了所有的花里胡哨。我想让这段代码与MSVC2010兼容,大意是使用语法不会改变。我之前已经思考过here,并且接受的答案有效,但是需要枚举和枚举值的两个不同名称正在破坏这两种方法的兼容性。这使得按原样替换C++0x代码当然无法使用。我想知道是否有一些#undef和#define诡计可以解决这个问题,让我使用enumclass-像语法(可能没有严格的类型安全等),但至少是相
假设我有这样的事情:enumCardColor{HEARTS,DIAMONDS,CLUBS,SPADES};CardColorMyColor=static_cast(100);是否有一种(简单的)方法可以在编译时或运行时检测MyColor的值不对应于任何枚举值?更一般地说,如果枚举值不相互跟随,例如:enumCardColor{HEARTS=0,DIAMONDS,CLUBS=4,SPADES}; 最佳答案 CashCow礼物adecentanswer对于这个问题:编写自定义函数来执行检查转换当然很简单。不幸的是,这也是很多工作,您必
假设我有这样的事情:enumCardColor{HEARTS,DIAMONDS,CLUBS,SPADES};CardColorMyColor=static_cast(100);是否有一种(简单的)方法可以在编译时或运行时检测MyColor的值不对应于任何枚举值?更一般地说,如果枚举值不相互跟随,例如:enumCardColor{HEARTS=0,DIAMONDS,CLUBS=4,SPADES}; 最佳答案 CashCow礼物adecentanswer对于这个问题:编写自定义函数来执行检查转换当然很简单。不幸的是,这也是很多工作,您必
为什么enum的大小总是2或4字节(分别在16位或32位体系结构上),而不管类型中的枚举数是多少?编译器是否像对待union一样对待enum? 最佳答案 在C和C++中,enum类型的大小是实现定义的,并且与某些整数类型的大小相同。一种常见的方法是使所有enum类型的大小与int相同,因为这通常是最有效访问的类型。例如,将其设为单个字节会节省非常少量的空间,但可能需要更大且更慢的代码才能访问它,具体取决于CPU架构。在C中,枚举constants由int类型定义。所以给定:enumfoo{zero,one,two};enumfooo
为什么enum的大小总是2或4字节(分别在16位或32位体系结构上),而不管类型中的枚举数是多少?编译器是否像对待union一样对待enum? 最佳答案 在C和C++中,enum类型的大小是实现定义的,并且与某些整数类型的大小相同。一种常见的方法是使所有enum类型的大小与int相同,因为这通常是最有效访问的类型。例如,将其设为单个字节会节省非常少量的空间,但可能需要更大且更慢的代码才能访问它,具体取决于CPU架构。在C中,枚举constants由int类型定义。所以给定:enumfoo{zero,one,two};enumfooo
我有一个类,其中有一个枚举,定义如下:classX{public:enumDirection{DIR_LEFT,DIR_RIGHT};};现在我希望在另一个类中重用这个枚举,如下所示:classY{public:typedefX::DirectionDirection;};正如预期的那样,使用Y::Direction可以正常工作,例如:voidmyFunction(Y::Directiondir){}但枚举中的值似乎没有与typedef一起“复制”。如果我编写以下内容,则会出现编译错误:myFunction(Y::DIR_LEFT);相反,我不得不再次引用枚举的原始位置,像这样:myF
我有一个类,其中有一个枚举,定义如下:classX{public:enumDirection{DIR_LEFT,DIR_RIGHT};};现在我希望在另一个类中重用这个枚举,如下所示:classY{public:typedefX::DirectionDirection;};正如预期的那样,使用Y::Direction可以正常工作,例如:voidmyFunction(Y::Directiondir){}但枚举中的值似乎没有与typedef一起“复制”。如果我编写以下内容,则会出现编译错误:myFunction(Y::DIR_LEFT);相反,我不得不再次引用枚举的原始位置,像这样:myF
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。如果枚举只在类成员函数中使用,你应该在类内部还是外部声明枚举?namespacenspace{//needtoappendOC,asthispollutesthecurrentnamespaceenumOUTSIDE_CLASS{OC_POINTS,OC_LINES,OC_LINE_LOOP,:::};enumOTHER_ENUM{OE_POINTS
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。如果枚举只在类成员函数中使用,你应该在类内部还是外部声明枚举?namespacenspace{//needtoappendOC,asthispollutesthecurrentnamespaceenumOUTSIDE_CLASS{OC_POINTS,OC_LINES,OC_LINE_LOOP,:::};enumOTHER_ENUM{OE_POINTS
我想知道在C++中,如果我有一个枚举,我可以访问第二个索引处的值吗?例如我有enumTest{hi,bye};如果我想要“嗨”,我可以做一些类似Test[0]的事情吗,谢谢。 最佳答案 是和不是。如果您的Enum没有明确的值,那么它是可能的。如果没有明确的值,枚举值会按照声明的顺序被赋予数值0-N。比如……enumTest{hi,//0bye//1}这意味着索引只是转换为文字值。TestEnumOfIndex(inti){returnstatic_cast(i);}这当然会在运行时进行0验证,一旦添加显式值,它就会崩溃。但它会在默认