2016-11-06 2 views
3

При возврате из функции, стиль следующего кодирования делает НЕ похожа на работу -Почему конечный результат варьируется?

return (int) minim(mid-l,r-mid) + (int) (mid+mid==n)?1:0; 

Но следующий код работает отлично -

int x = minim(mid-l,r-mid); 
    int y = (mid+mid==n)?1:0; 
    return x+y ; 

середина, л, г, п - целые числа.

Может кто-нибудь, пожалуйста, помогите мне понять, почему?

+1

Если вы найдете ответы ниже полезными, вы должны рассмотреть возможность принятия одного из них, нажав на значок галочки. –

ответ

3

Вы должны добавить круглые скобки, как '+' принимает precedence над тройным оператором '?:'

return (int) minim(mid-l,r-mid) + ((int) (mid+mid==n)?1:0); 
+0

Спасибо, что у вас есть квант! –

3

Благодаря оператору precedence

return (int) minim(mid-l,r-mid) + (int) (mid+mid==n)?1:0; 

означает

return ((int) minim(mid-l,r-mid) + (int) (mid+mid==n))?1:0; 

не

return (int) minim(mid-l,r-mid) + ((int) (mid+mid==n))?1:0); 
+0

Спасибо AlexD! –