की गलत अग्रेषण मैं नए जोड़े गए रावल्यू रिफर्न्स (बनाम2012 एक्सप्रेस में) के साथ प्रयोग कर रहा था।रैवल्यू संदर्भ
मुझे कुछ समझ में नहीं आता है। नीचे दिए गए कोड को देखते हुए (इसमें से अधिकांश सी ++ मानक से लिया गया है जहां std :: आगे समझाया गया है)।
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 कहां से बंधे हैं।
मैं मूल रूप से, एक rvalue संदर्भ (& & &) के लिए एक lvalue संदर्भ होगा द्वारा रेफरी नियम टूट हो जाता है (&) सिर्फ एक सादे lvalue रेफरी। लेकिन क्या संदर्भ है?
स्कॉट मेयर्स ने इंगित किया कि, एक सार्वभौमिक संदर्भ ('t && 'टाइप-प्रत्याशित' टी' के साथ) का उपयोग किसी भी 'std :: forward' या' std :: move' के बिना कम से कम संदिग्ध है । अब मैं स्पष्ट रूप से देख सकता हूं क्यों। –