什么时候枚举变量用C ++进行评估

时间:2017-06-23 20:30:30

标签: c++ enums

澄清设置为全零的变量就是断开的情况。注释中包含值的枚举工作正常。

这是我的代码的简化,问题是接收"枚举错误"。所以我的问题是什么时候才能评估枚举?另外,最好我可以枚举枚举基本上是整数,因此枚举变量为0应该评估为假,并且当我将它们全部归零时永远不会到达抛出。

enum var_types//Set all to 0 to disable 
{
  VAR1 = 0x0,   //var1 = 0x1
  VAR2 = 0x0,   //var2 = 0x2
  VAR3 = 0x0,   //var3 = 0x3
  VAR4 = 0x0,   //var4 = 0x4
  VAR_NONE =0x0 //disabled = 0x0
};


func(int var){
  if(var){
    if(var==VAR1){ cout << VAR1 << endl;}
    else if(var==VAR2){ cout << VAR2 << endl;}
    else if(var==VAR3){ cout << VAR3 << endl;}
    else if(var==VAR4){ cout << VAR4 << endl;}
    else {throw job_error("enum error");}
  }
//doing other things...
}

func(VAR1);
func(VAR2);
func(VAR3);
func(VAR4);
func(VAR_NONE);

代码的动机是快速禁用多次评估&#34; if&#34;声明在代码顶部的单个位置调用函数,同时还允许单独禁用它们。大约有15个电话给&#34; func&#34;代码分散在1200多行代码中。枚举的归零是从一个地方禁用所有内容的便捷方式。

2 个答案:

答案 0 :(得分:1)

&#39; VAR1..VAR4&#39;的值在编译时被定义,并且实际上允许它们全部归零&#34;,使得None全部评估为&#34; true&#34;。问题可能出在您的代码中,在每个int var=0; var==VAR1; var==VAR2; ...之后您有;,这样(一旦您因错位if而纠正编译错误),您可能会输入所有{{1} }} - 语句。 因此,对于以下改编的代码,没有一个调用产生&#34;枚举错误&#34;:

else

但请注意,您通常也会使用if - 类型作为参数类型。这将保护您在编译时使用&#34;未定义的枚举值&#34;:

void func(int var){
    if(var){
        if(var==VAR1){}
        else if(var==VAR2){}
        else if(var==VAR3){}
        else if(var==VAR4){}
        else {cout << "enum error";}
    }
    //doing other things...
}

int main() {    
    func(VAR2);
    func(VAR3);
    func(VAR4);
}

答案 1 :(得分:0)

所有枚举条目都明确赋值为0x0,因此它们无法区分(并且全部为零)。

您的评论表明您打算让他们拥有不同的价值 - 如果您没有为他们指定明确的价值,他们会这样做。

所以,如果你只是删除了显式的值赋值,你应该得到你想要的。

但我真正想知道的是;您试图在这里解决的实际问题是什么?

相关问题