Что значит "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