Я экспериментировал с новыми добавленными ссылками rvalue (в vs2012 express).Неправильная пересылка ссылки rvalue
Я ничего не понимаю. Учитывая код ниже (большая часть его взята из стандарта C++, где объясняется std :: forward).
struct A
{
A(int& i, const float& j):
m_i(i),
m_j(j){}
int& m_i;
const float& m_j;
};
template<class T, class A1, class A2>
T* factory(A1&& a1, A2&& a2)
{
return new T(a1, a2);
}
void test()
{
A* a1 = factory<A>(1, 1.2f);
//How does this work ?
a1->m_i = 2;
}
Я не понимаю, к чему привязана m_i.
Я в основном имеют ссылки Lvalue к ссылке на RValue (& & &), что реф рушится правил становится (&) только простой Lvalue реф. Но ссылка на что?
Как отметил Скотт Мейерс, любое использование универсальной ссылки ('T &&' с типом-выведенным 'T') без либо' std :: forward', либо 'std :: move' является, по меньшей мере, сомнительным , Теперь я ясно понимаю, почему. –