Правильная программа может выглядеть, например, следующим образом
#include <iostream>
int main()
{
int num, a = 15;
num = (----a)--;
std::cout << num << std::endl;
std::cout << a << std::endl;
return 0;
}
Его выход
13
12
Оператор постдекремент имеет более высокий приоритет, чем оператор предекремент и его результат rvalue
, которые не могут быть изменены.
Это выражение
----a--
эквивалентно
----(a--)
и не будет компилироваться.
Таким образом, для компиляции программы вам необходимо использовать круглые скобки.
Примите во внимание, что соответствующая программа написана на C, как, например
#include <stdio.h>
int main(void)
{
int num, a = 15;
num = (----a)--;
printf("%d\n", num);
printf("%d\n", a);
return 0;
}
не будет компилироваться, так как оператор предекремент в C также возвращает RValue и вы не можете применить оператор к RValue.
Действует только программа на С ++.
Решение состоит в том, чтобы не использовать такой зафускированный фрагмент кода и четко выражать то, что вы хотите. Программирование достаточно сложно, поэтому сделать это сложнее, чем это должно быть? – NathanOliver
@NathanOliver no no на самом деле это именно то, что было задано в вопросительной бумаге –
Почему '----' отменяет друг друга? '--' уменьшается, поэтому я не понимаю, почему двое из них будут уменьшаться и увеличиваться. Кроме того, при получении ошибки компилятора вы должны полностью указать точную ошибку, а не пытаться ее описать. – chris