ı bir işlevi var diyelim:Dönüş değerleri C++ 0x'da rvalue başvurusu ile mi iletilecek?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
mu C++ 0x özellikle sahte kopya randomVector dönüş değerinden önlenebilecektir demek? Ya da bir derleyicinin RVO'yu hayata geçirmesi gerekir mi? Bana randomVector()
değeri bir değer olarak değerlendirilmeli gibi görünüyor ve bu nedenle v'nin hareket kurucusu çağrılmalı, ancak bunun doğru olduğuna emin değilim.
İyi bir soru değil, IMHO. Standart, bir uygulamanın ne yapabileceğini, ne yapması gerektiğini, ne yapması gerektiğini belirtemez. –
Gerçekte, verdiğiniz örnekte, Dönüş Değerinin Optimizasyonu, çoğu derleyici tarafından gerçekleştirilir ... Bu nedenle, rengin olmadığı durumlarda etkilidir. Ayrıca, argümanların işlevlere geçirilmesi için de rengin daha önemlidir. – Artyom
Sorunun başlığı biraz yanıltıcıdır. İşleviniz bir referans değil, bir değer döndürür. Ancak bir rvalue referansı, kopya elisyonunun bir nedenden dolayı gerçekleştirilememesi ve türün bir hareket-yapıcıya sahip olması durumunda gerçekleşen bir bağlantıya bağlanabilir (Hareket-yapıcının parametresi bir referans değerdir) – sellibitze