void main()
{
int num, a=15;
num = ----a--;
cout<<num;
cout<<a;
}
Я попробовал это … Я должен получить
15
14
На бумаге, потому что 4 минус отменяют друг друга, и что осталось, это—
Но на ПК я получаю ошибку компиляции, потому что —- перед тем, как a— заставляет компилятор думать, что в этом ‘—-‘ есть операторы до / после декремента, и запрашивает операнд. Какое решение?
Правильная программа может выглядеть, например, следующим образом
#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.
Только программа на C ++ действительна.
Других решений пока нет …