Что значит "xvalue имеет идентичность"?
C++11 ввел новые категории значений, одна из них -xvalue.
это объяснил по Страуструпу как - то вроде (im категория): "это значение, которое имеет идентичность, но может быть перемещено из".
другой источник, cppreference объясняю:
glvalue-это выражение, оценка которого определяет идентичность объекта, битового поля или функции;
и xvalue это glvalue, так что это утверждение верно для xvalue тоже.
теперь, я думал, что если xvalue имеет идентичность, тогда я могу проверить, если два xvalues относятся к тому же объекту, поэтому я беру адрес 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
