Есть ли какое-либо преимущество в использовании ссылки на значение r при создании объекта, который в противном случае был бы в нормальной локальной переменной?
Foo&& cn = Foo();
cn.m_flag = 1;
bar.m_foo = std::move(cn);
//cn is not used again
Foo cn;
cn.m_flag = 1;
bar.m_foo = std::move(cn); //Is it ok to move a non rvalue reference?
//cn is not used again
В первом фрагменте кода кажется ясным, что копий не будет, но я бы предположил, что во втором компилятор будет оптимизировать копии?
Также в первом фрагменте, где находится объект, фактически сохраненный в памяти (во втором он хранится в кадре стека из функции включения)?