Tarafından rvalue başvuru daha verimli dönüyor?
örneğin:
Beta_ab&&
Beta::toAB() const {
return move(Beta_ab(1, 1));
}
CEVAP
Beta_ab&&
Beta::toAB() const {
return move(Beta_ab(1, 1));
}
Bu lvalue başvuru durum gibi sarkan bir referans verir. İşlevini verir, sonra, geçici bir nesne yok. Aşağıdaki gibi değer Beta_ab
iade etmelisiniz
Beta_ab
Beta::toAB() const {
return Beta_ab(1, 1);
}
Şimdi, düzgün işlevin dönüş değeri ** 10 geçici bir nesne hareket ediyor. Eğer derleyici, hareket tamamen, rvt li (dönüş değeri optimizasyon) kullanarak önlemek olacaktır. Şimdi, aşağıdakileri yapabilirsiniz
Beta_ab ab = others.toAB();
Ve ab
, geçici inşa veya rvt li bir hareket yapmayı ihmal veya tamamen kopya hareket edecek. Sen meseleyi açıklıyor, ve (N)rvt li bu etkileşim nasıl olur BoostCon09 Rvalue References 101 okumanızı tavsiye ederim.
< / ^ hr .
Rvalue başvurusu dönen dava diğer durumlarda iyi bir fikir olacaktır. Sık sık bir geçici * çağır getAB()
bir işlevi olduğunu varsayalım. Optimal değil bu rvalue dişler için sabit lvalue başvuru dönüş yapmak için. Bu şekilde uygulayabilir
struct Beta {
Beta_ab ab;
Beta_ab const& getAB() const& { return ab; }
Beta_ab && getAB() && { return move(ab); }
};
Bu durumda move
ab
yerel otomatik ne de geçici bir rvalue ne olduğundan değil, isteğe bağlı olduğunu unutmayın. Şimdiref-niteleyici&&
ikinci fonksiyon rvalue geçici, aşağıdaki taşıma, kopyalama yapmak yerine çağrılan diyor
Beta_ab ab = Beta().getAB();
Bu iki döngü için zaman ve önbellek pe...
Nedir &; bu" için *; rvalue başvur...
Grup tarafından daha önce MySQL sipari...
Neden Java nesne başvurusu bir ilkel d...
değeri tarafından başvuru veya shared_...