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();
RValue Başvuru (&&) a dönmek yararlı o...
Daha verimli olan C, dizeleri bitiştir...
2 tarafından bir tamsayı bölme için ku...
C# ADO.NET: boşluk ve DbNull -- orada ...
PHP Değişken değeri tarafından geçiril...