Как здесь работает ссылка rvalue?

Я озадачен следующим кодом:

#include <iostream>

int main()
{
int x{};

int&& rvx = static_cast<int&&>(x);
++rvx;
std::cout << x << std::endl;
}

Выход этого 1, Я не понимаю, как это работает. static_cast должен бросить lvalue x в xvalue, который затем присваивается rvx, Почему увеличивается rvx привести к изменению x? Это потому, что преобразованное значение lvalue в rvalue по существу находится в той же ячейке памяти, но теперь считается только значением rvalue? У меня сложилось впечатление (что, вероятно, неверно), что каким-то образом актерский состав создает временные аргументы.

0

Решение

Rvalue ссылка Можно привязать к временному. Это то, что вы получите, например, если вы напишите

int x{};
int&& rvx = +x;

Но это не так необходимость привязать к временному. Кастинг x в int&&Вы указали компилятору, что это тоже нормально, что он может лечить x как значение для привязки непосредственно к ссылке.

4

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

Ссылка rvalue является ссылкой. В этом он работает так же, как любая другая ссылка.

5

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