Какой вывод этого кода? Я что-то здесь упускаю?

void main()
{
int num, a=15;
num = ----a--;
cout<<num;
cout<<a;
}

Я попробовал это … Я должен получить
15
14
На бумаге, потому что 4 минус отменяют друг друга, и что осталось, это—

Но на ПК я получаю ошибку компиляции, потому что —- перед тем, как a— заставляет компилятор думать, что в этом ‘—-‘ есть операторы до / после декремента, и запрашивает операнд. Какое решение?

-6

Решение

Правильная программа может выглядеть, например, следующим образом

#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 ++ действительна.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector