2016-08-28 7 views
-5

多分同じ質問がありましたが、私はそれをどのように公式化するのか分かりません。if else statements調合

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

そして

int x; 
if(someCondition) 
{ 
    x = 1; 
} 
else 
{ 
    x = 0; 
} 
このよう
+0

どちらも同じことを行います。 – DimChtz

+0

技術的に違いはありませんが、常に変数の初期化を優先することができます(c#IIRCでは不要)。 –

+0

結果は同じですが、パフォーマンスやその他の違いはありますか? –

答えて

4

リトル質問は、godboltなどのオンラインのコンパイラでテストすることは非常に容易されています:アセンブラ結果

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); 
} 

は、それは何か違いです
test1(bool): 
     movzx eax, dil 
     ret 
test2(bool): 
     movzx eax, dil 
     ret 

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

だから、実際にはない。それは単なるスタイルの問題です。

+1

@テストの前に変数をゼロに設定することに暗黙的なelseがあります。関心のある人のためのゴッドボルトへのリンク –

+0

:https://gcc.godbolt.org/ – primodemus

0

コンパイラは、それがまったく同じであることを理解するのに十分巧妙であり、同じコードを生成します。

違いは可読性と保守性です。いずれかのバージョンを大きなプログラムの一部として使用している場合は、実行されていることの論理的概念を反映する必要があります。