SORU
12 Temmuz 2009, Pazar


Tarafından rvalue başvuru daha verimli dönüyor?

örneğin:

Beta_ab&&
Beta::toAB() const {
    return move(Beta_ab(1, 1));
}

CEVAP
12 Temmuz 2009, Pazar


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();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 07cadikiz07

    07cadikiz07

    17 EKİM 2007
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008