Я не согласен с этим автором.
Все операторные выражения, унарные, двоичные или троичные, оцениваются как значения.
Даже ограничиваясь унарными операторами, все десять из них, похоже, "возвращают значение" (например, выражение оценивается как значение ):
&
- AddressOf: возвращает адрес памяти переменной
*
- Разыменование: возвращает значение, хранящееся по адресу памяти
!
- логическая не
~
- двоичный код не
++x
- приращение префикса
x++
- Постфиксный прирост
--x
- Префикс декремента
x--
- Постфиксный декремент
sizeof(x)
- Оператор размера (однако не во время выполнения)
(type)(x)
- Оператор приведения преобразует значение одного типа в другой тип.
Если предложение предназначалось для: «Единственный оператор, который возвращает l-значение - это оператор разыменования.» , тогда он имеет больше смысла, но все еще несовершенный и неточный:
Примеры:
y = x; // Simple Assignment
*y = x; // Assignment with dereference operator
y[5] = x; // Wait? Is this another operator forming an L-Value?
y.f = x; // Another one?
y->f = x; // The author was clearly wrong.