Думаю, ви здебільшого відповіли на власне запитання. Я можу внести невелику зміну до вашого фразування та замінити "тимчасову змінну" на "rvalue", як згадував C.Gibbons.
Змінна терміни, аргумент, тимчасова змінна та інше стануть більш зрозумілими, коли ви дізнаєтесь про модель пам'яті C (це виглядає як приємний огляд: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
Термін "rvalue" може здатися непрозорим, коли ви тільки починаєте, тому я сподіваюся, що наступне допомагає розвинути інтуїцію щодо цього.
Lvalue / rvalue говорять про різні сторони знаку рівності (оператор присвоєння): lvalue = ліва сторона (нижня літера L, а не "одна") rvalue = права сторона
Дізнатися трохи про те, як C використовує пам'ять (і регістри), буде корисним, щоб зрозуміти, чому розрізнення важливе. У широких штрихах пензлем компілятор створює список машинних мовних інструкцій, які обчислюють результат вираження (rvalue) і потім ставлять цей результат десь (lvalue). Уявіть компілятор, що займається наступним фрагментом коду:
x = y * 3
У псевдокоді збірки це може виглядати приблизно як такий приклад іграшки:
load register A with the value at memory address y
load register B with a value of 3
multiply register A and B, saving the result in A
write register A to memory address x
Оператору ++ (і його - аналогу) потрібно "десь" змінити, по суті, все, що може працювати як значення.
Розуміння моделі пам'яті C буде корисним, оскільки ви отримаєте краще уявлення в голові про те, як аргументи передаються функціям та (зрештою), як працювати з динамічним розподілом пам'яті, як функція malloc (). З подібних причин ви можете вивчити просте програмування складання в якийсь момент, щоб краще зрозуміти, що робить компілятор. Також якщо ви використовуєте gcc , опція -S "Зупинитись після належного етапу компіляції; не збирайте". може бути цікавим (хоча рекомендую спробувати його на невеликому фрагменті коду).
Як і вбік: інструкція ++ існує з 1969 року (хоча вона почалася ще у попередника C, B):
(Спостереження Кена Томпсона) було, що переклад ++ x був меншим, ніж переклад x = x + 1. "
Після цього посилання на вікіпедію перенесе вас до цікавого опису Денніса Річі ("R" в "K&R C") про історію мови C, зв'язаний тут для зручності: http://www.bell-labs.com/ usr / dmr / www / chist.html, де можна шукати "++".