Что значит "xvalue имеет идентичность"?
C++11 ввел новые категории значений, одна из них -xvalue
.
это объяснил по Страуструпу как - то вроде (im
категория): "это значение, которое имеет идентичность, но может быть перемещено из".
другой источник, cppreference объясняю:
glvalue-это выражение, оценка которого определяет идентичность объекта, битового поля или функции;
и xvalue
это glvalue
, так что это утверждение верно для xvalue
тоже.
теперь, я думал, что если xvalue
имеет идентичность, тогда я могу проверить, если два xvalue
s относятся к тому же объекту, поэтому я беру адрес xvalue
. Как оказалось, не допускается:
int main() {
int a;
int *b = &std::move(a); // NOT ALLOWED
}
что это значит xvalue
есть личность?
1 ответов
xvalue имеет идентичность, но в языке есть отдельное правило, что унарный &
-для выражения требуется операнд lvalue. Из [expr.унарный.op]:
результат унарного
&
оператор является указателем на его операнд. Операнд должен быть lvalue [...]
вы можете посмотреть идентификатор xvalue после выполнения преобразования rvalue в lvalue, привязав xvalue к ссылке:
int &&r = std::move(a);
int *p = &r; // OK