Что значит «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 есть личность?

7

Решение

У xvalue есть тождество, но в языке есть отдельное правило, что унарный &-выражение требует операнд lvalue. От [expr.unary.op]:

Результат одинарный & Оператор является указателем на свой операнд. Операнд должен быть lvalue […]

Вы можете посмотреть на идентичность xvalue после выполнения преобразования rvalue в lvalue, связав xvalue со ссылкой:

int &&r = std::move(a);
int *p = &r;  // OK
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]