2016-08-28 2 views
-5

Возможно, был такой же вопрос, но я не знаю, как его сформулировать. ли какая-то разница между:if else формулировка формулировки

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

@ Уязвимость существует, если неявное значение в установке переменной в ноль перед тестом. –

+0

ссылка на godbolt для желающих: https://gcc.godbolt.org/ – primodemus

0

Компилятор достаточно умен, чтобы понять, что он точно такой же, и будет генерировать тот же код.

Разница в читаемости и ремонтопригодности; если у вас есть какие-либо версии как часть более крупной программы, она должна отражать логические концепции того, что делается.