Поведение до и после приращения в C ++ - PullRequest
0 голосов
/ 03 февраля 2020

(C ++) Почему
std::cout << ++(a++);
показывает error: lvalue required as increment operand
, а
std::cout << (++a)++;
показывает вывод "1"

(Java) Но в Java в обоих случаях выдается исключение. Потому что операторы увеличения и уменьшения работают с переменной, а не со значениями. И выводом оператора скобок всегда является значение.

Заранее спасибо.

1 Ответ

1 голос
/ 03 февраля 2020

Возвращаемый тип преинкремента - T&, что позволяет изменить его (потому что это не const ссылка). Постинкремент возвращает T: это неназванное значение в контексте t++. Следовательно, результат считается константным, поэтому вы не можете изменить его состояние.

Если вы хотите найти больше информации, вы можете выполнить поиск по lvalues, (p) rvalues ​​et c. но их может быть трудно понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...