Adlandırılmış rvalue başvurular lvalues'dir. Adsız rvalue referansları r değerleridir.
foo&& r = foo(); foo f = std::move(r);
Bu yanıt bir göz atın: Bu std :: hareket çağrı neden gerekli olduğunu anlamak önemlidir https://stackoverflow.com/a/5481588/1394283 Çok iyi açıklıyor.
Bu fonksiyonun bir göz atın:
void foo(X&& x)
{
X anotherX = x;
// ...
}
ilginç bir soru: foo
gövdesinde çağrılan lar yapıcısı kopya X
' hangi aşırı yük? Burada, x
, bir rvalue referansı olarak bildirilen bir değişkendir. Bu nedenle, x
'un kendisinin de bir rengin gibi bağlanmasını beklemek oldukça mantıklıdır, yani X(X&& rhs);
çağrılmalıdır. Hareket sematics biz sadece taşınmış bir şey, yani, çünkü son derece kafa karıştırıcı ve hataya açık olacaktır
X anotherX = x;
// x is still in scope!
olduğu gibi bir adı olan bir şeye zımnen uygulanacak izin
, şey Sadece kazdık, sonraki kod satırlarında hala erişilebilir. Ama hareketin anlambilim noktasının tüm noktası, taşıdığımız şeyin ölmesi ve hareket ettikten hemen sonra ortadan kalkması anlamında onu sadece "farketmez" olduğu yerde uygulamaktı.
şeyler Sol taraf veya SağDeğerler olabilir rvalue referans olarak ilan edilmiştir: rvalue referansların tasarımcıları biraz daha zekice bir çözüm seçmiş yüzden
. Ayırt edici ölçüt: eğer bir ismi varsa, o zaman bir değerdir. Aksi halde, bu bir değerdir.
Kaynak: http://thbecker.net/articles/rvalue_references/section_05.html
Named referanslar Sol taraf vardır. *Her zaman*. –
Çok uzun, ama [bu iyi bir okuma] (http://thbecker.net/articles/rvalue_references/section_01.html) rvalue referansları hakkında her şeyi öğrenmek için. –
R. Martino Fernandes: Teşekkürler! Bunu bir cevap olarak kabul ediyorum. – Petter