C/C++

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

В каком порядке выполняются операции в программе и какие синтаксические ошибки здесь присутствуют.

int i, l, j, k;
i, l, j, k = 0;
int a = i++ && ++j || k || l++
Желательный код для второй строки
 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.
Виталик Пронька
Виталик Пронька
88 374
Лучший ответ
Подвыражения, разделённые && или ||, выполняются строго слева направо. А т.к. имеющая больший приоритет операция && стоит первой, то выполнятся подвыражения будут именно в том порядке, в котором записаны - с пропуском всех подвыражений, значения которых не влияют на значение всего логического выражения.

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

Так что и итоговое значение переменной a (0 или 1) тоже неизвестно.
Обьявление, присваивание и так далее.
Adik [Id169877240] Именно в логическом выражении какой порядок?
 int i, l, j, k; 
i, l, j, k = 0;
int a = i++ && j++ || k || l++;
Нужно не ++j, а j++ и точку с запятой в конце

Похожие вопросы