2016-08-28 2 views
-5

Vielleicht gab es die gleiche Frage, aber ich weiß nicht, wie man es formuliert. Ist es ein Unterschied zwischen:wenn sonst Aussagen Formulierung

int x = 0; 
if(someCondition) 
{ 
    x = 1; 
} 

Und

int x; 
if(someCondition) 
{ 
    x = 1; 
} 
else 
{ 
    x = 0; 
} 
+0

Beide werden das gleiche tun. – DimChtz

+0

Nein, es gibt technisch keinen Unterschied, außer immer Variablen zu initialisieren (nicht notwendig in C# IIRC). –

+0

Ergebnis ist dasselbe, aber jeder Unterschied in der Leistung oder irgendetwas anderes? –

Antwort

4

Kleine Fragen wie diese sind sehr einfach auf Online-Compiler wie Godbolt zu testen:

int test1(bool someCondition) 
{ 
    int x = 0; 
    if(someCondition) 
    { 
    x = 1; 
    } 
    return x; 
} 

int test2(bool someCondition) 
{ 
    int x; 
    if(someCondition) 
    { 
    x = 1; 
    } 
    else 
    { 
    x = 0; 
    } 
    return x; 
} 

int test3(bool someCondition) 
{ 
    return someCondition ? 1 : 0; 
} 

int test4(bool someCondition) 
{ 
    return int(someCondition); 
} 

resultierende Assembler:

test1(bool): 
     movzx eax, dil 
     ret 
test2(bool): 
     movzx eax, dil 
     ret 

test3(bool): 
     movzx eax, dil 
     ret 
test4(bool): 
     movzx eax, dil 
     ret 

so in der Realität, nein. Es ist nur eine Frage des Stils.

+1

@Ausgefallen gibt es eine implizite Else, die Variable vor dem Test auf Null zu setzen. –

+0

Link zu godbolt für Interessierte: https://gcc.godbolt.org/ – primodemus

0

Der Compiler ist schlau genug zu verstehen, dass es genau das gleiche ist, und wird den gleichen Code generieren.

Der Unterschied liegt in der Lesbarkeit und Wartbarkeit; Wenn Sie beide Versionen als Teil eines größeren Programms haben, sollte es die logischen Konzepte dessen widerspiegeln, was getan wird.