Я озадачен следующим кодом:
#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? У меня сложилось впечатление (что, вероятно, неверно), что каким-то образом актерский состав создает временные аргументы.
Rvalue ссылка Можно привязать к временному. Это то, что вы получите, например, если вы напишите
int x{};
int&& rvx = +x;
Но это не так необходимость привязать к временному. Кастинг x
в int&&
Вы указали компилятору, что это тоже нормально, что он может лечить x
как значение для привязки непосредственно к ссылке.
Ссылка rvalue является ссылкой. В этом он работает так же, как любая другая ссылка.