Erläuterung Die Variablen, die auf alle Nullen gesetzt sind, sind der Fall, in dem sie bricht. Die enums mit den Werten in Kommentaren funktioniert gut.Wann wird die aufgezählte Variable in C++ ausgewertet?
Dies ist eine Vereinfachung meines Codes, das Problem ist, dass die "enum error" erhalten. Die Frage, die ich habe ist, wann werden die Enums bewertet? Außerdem kann ich am besten Entezahlen im Ganzen verstehen, also sollte eine Enumerationsvariable auf 0 als falsch bewertet werden und niemals den Wurf erreichen, wenn ich sie alle auf Null setze.
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);
Motivation für den Code ist schnell zahlreiche Auswertung der „if“ Anweisung in einer Vielzahl von Anrufen auf die Funktion von einem einzigen Platz an der Spitze des Codes zu deaktivieren, während auch einzeln sie zum Sperren ermöglicht. Es gibt ungefähr 15 Aufrufe von "func" in Code, der über 1200 Codezeilen verteilt ist. Die Nullstellung der Enums ist eine bequeme Möglichkeit, sie alle von einem Ort aus zu deaktivieren.
Alle Ihre Enum-Werte sind auf den gleichen Wert gezwungen, also was erwarten Sie? –
Enumeratoren sind konstante Werte. Sie werden zur Kompilierzeit ausgewertet. –
Bereinigen Sie Ihre 'if's und verwenden Sie einen' Schalter'. Das erste "if" ist zusätzliche Arbeit und bietet einen signifikanten Leistungsgewinn. Ein Schalter kann durch Tabellensuche oder mathematische Funktion ausgewertet werden. –