[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 94

 

Правильны оба варианта, но быстрее второй. В первом всегда проверяются все условия, во втором - не все. И лучше, чтобы не путаться с принадлежностью else, писать примерно так:

//--- 2.
if (cond_0)
{  if (cond_1)           a=result_1;
   else if (cond_2)      a=result_2;
        else if (cond_3) a=result_3;
}

Или сразу ставить фигурные скобки, обрамляющие блоки.

 
Mathemat:

Правильны оба варианта, но быстрее второй. В первом всегда проверяются все условия, во втором - не все. И лучше, чтобы не путаться с принадлежностью else, писать примерно так:

Или сразу ставить фигурные скобки, обрамляющие блоки.

Благодарю за совет. Если раньше я стремился вообще правильно написать советник, то сейчас уделяю внимание его быстродействию. :)
 
Mathemat:

Правильны оба варианта

Нет, коды вообще неравнозначны.
 
может проще через swith() пропустить, если условия конечно не надо вычислять...
 
TheXpert: Нет, коды вообще неравнозначны.

Ну да, давай теперь порассуждаем о том, что будет, когда cond_1, cond_2, cond_3 не взаимно исключаемы...

Я не спорю, коды дают в общем случае разный результат. Но если условия не пересекаются, то результаты одинаковые вроде.

 
FAQ:
может проще через swith() пропустить, если условия конечно не надо вычислять...
В switch значение при case должно быть int, а не всегда cond_ есть int. Мне честно говоря интересна была сама логика, какая запись лучше/быстрее.
 
paladin80:
В switch значение при case должно быть int, а не всегда cond_ есть int. Мне честно говоря интересна была сама логика, какая запись лучше/быстрее.
раздельные условия, причем сверху самые часто используемые
 
paladin80:
В switch значение при case должно быть int, а не всегда cond_ есть int. Мне честно говоря интересна была сама логика, какая запись лучше/быстрее.

Вторая, но есть ограничение на вложенность.

Лучше использовать case, если есть такая возможность.

 
Да, switch я использую. На счёт взаимоисключаемости условий, я это явление понимаю так:
//--- 1.
int x=1, y=1;
if (x==1)
{  if (y>0)  a=result_1;
   if (y<2)  a=result_2;
   if (y==1) a=result_3;
}
// a=result_3

//--- 2.
int x=1, y=1;
if (x==1)
{  if (y>0)            a=result_1;
   else if (y<2)       a=result_2;
        else if (y==1) a=result_3;
}
// a=result_1
 

У Вас как раз все условия соблюдаются при y = 1. Они не исключают друг друга.

Взаимоисключающие - это, например, такие: y<0, y==0, y>0.

Причина обращения: