Порядок действий в с++ - Вопросы по С+

Вопрос Порядок действий в с++

Регистрация
9 Июн 2013
Сообщения
74
Репутация
0
Спасибо
0
Монет
0
В каком порядке выполняются операции в программе и какие синтаксические ошибки здесь присутствуют.



int i, l, j, k;

i, l, j, k = 0;

int a = i++ && ++j || k || l++
 
Регистрация
22 Окт 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Подвыражения, разделённые && или ||, выполняются строго слева направо. А т.к. имеющая больший приоритет операция && стоит первой, то выполнятся подвыражения будут именно в том порядке, в котором записаны - с пропуском всех подвыражений, значения которых не влияют на значение всего логического выражения.

Конструкция i, l, j, k = 0; обнуляет ТОЛЬКО переменную k, а все прочие переменные содержат неизвестный мусор. Так что в логическом выражении безусловно выполнится только i++ (при этом значение i неизвестно). Выполнятся ли остальные части выражения, неизвестно.

Так что и итоговое значение переменной a (0 или 1) тоже неизвестно.
 
Регистрация
22 Авг 2013
Сообщения
76
Репутация
0
Спасибо
0
Монет
0
Желательный код для второй строки
i = l = j = k = 0; тогда a = 0, i = 1, l = 1, j = 0, k = 0, т. к. постфиксный инкремент j++ не выполняется вообще ввиду того, что оператор && выполняется по сокращённому принципу. Т. е. если левый операнд равен false, то и всё выражение равно false и в вычислении правого операнда нет смысла, поэтому j останется равным 0. Постфиксный инкремент выполняется в выражении последним. Оператор || также вычисляется по сокращённому принципу. Т. е. если левый операнд равен true,то дальнейшее вычисление прекращается и всё выражение принимается за истину, в противном случае требуется вычислять правый операнд. Поэтому инкремент l++ выполняется, но также значение переменной будет изменено только после выполнения оператора присваивания. Так как все операнды на момент выполнения оператора присваивания в выражении равны 0, после его вычисления, то результатом выражения будет false, что при неявном приведении типа к int будет равным 0.
 
Сверху Снизу