2013-05-10 3 views
5
int a = 1, b = 0; 

if(a, b) 
    printf("success\n"); 
else 
    printf("fail\n"); 

if(b, a) 
    printf("success\n"); 
else 
    printf("fail"); 

Это CPP файл, и я получил выход в Visual Studio 2010, какзапятая оператор, если условие

fail 
success 

Почему такое поведение? Не могли бы вы объяснить?

+6

Вы знаете, что он использует оператор запятой в состоянии, но вы должны спросить? –

+0

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

+0

@ DanielFischer Я знаю, что запятая действует как точка последовательности в операторах, но не в аргументах к функциям. Можете ли вы сказать мне, является ли это точкой последовательности внутри 'if'? Я интуитивно чувствую ** да **, но я бы хотел, чтобы вы подтвердить. –

ответ

35

http://en.wikipedia.org/wiki/Comma_operator:

В C и C++ языков программирования, оператор запятой (в лицо маркеров ,) представляет собой бинарный оператор, который оценивает его первого операнда и отбрасывает результат, а затем оценивает второй операнд и возвращает это значение (и тип).

В своем первом if:

if (a, b) 

a оценивается первым и отбрасываются, b оценивается второй и возвращается как 0. Таким образом, это условие ложно.

В вашем втором if:

if (b, a) 

b оценивается первым и отбрасываются, a оценивается второй и возвращается в 1. Таким образом, это условие истинно.

Если имеется более двух операндов, последнее выражение будет возвращено.

Если вы хотите, чтобы оба условия, чтобы быть правдой, вы должны использовать && operator:

if (a && b) 
+0

Так в чем же смысл делать такие условия? может ли кто-нибудь предоставить лучший и полезный пример. – Pars

+1

@Pars Это полезно, если вы хотите выполнить операцию, которая вызывает побочные эффекты, но не нуждается в фактическом возвращаемом значении. Например, у меня было это условие в одном из моих проектов: 'if (numeric_read (str, & err),! Err)'. Если бы я использовал '&&! Err' вместо',! Err', я бы не смог прочитать числа, которые были 0. –

Смежные вопросы