Что значит «xvalue имеет идентичность»? - PullRequest
0 голосов
/ 10 июня 2018

C ++ 11 ввел новые категории значений, одна из них xvalue.

Это объяснено Страуструпом как-то вроде (im категория): "этозначение, которое имеет идентичность, но может быть перемещено из ".

Другой источник, cppreference объясняет:

glvalue - это выражение, оценка которого определяетидентификатор объекта, битового поля или функции;

И xvalue - это glvalue, так что это утверждение верно и для xvalue.

ТеперьЯ думал, что если xvalue имеет идентичность, то я могу проверить, ссылаются ли два xvalue на один и тот же объект, поэтому я беру адрес xvalue.Как оказалось, это не разрешено:

int main() {
    int a;
    int *b = &std::move(a); // NOT ALLOWED
}

Что значит, что xvalue имеет идентичность?

1 Ответ

0 голосов
/ 10 июня 2018

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

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

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

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