SORU
4 Temmuz 2013, PERŞEMBE


c 11 Dönüş değeri iyileştirme veya hareket?

std::move kullanmanız gereken zaman ve derleyici... örneğin optimize izin vermeliyim anlamam:

using SerialBuffer = vector< unsigned char >;

// let compiler optimize it
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    // Return Value Optimization
    return buffer;
}

// explicit move
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    return move( buffer );
}

Hangisini kullanmalıyım?

CEVAP
4 Temmuz 2013, PERŞEMBE


Tüm dönüş değerleri zaten moved veya başka optimize edilmiş, açıkça dönüş değerleri ile hareket etmeye gerek yok.

Derleyicilerizin verdigerekliotomatik olarak bir dönüş değeri (kopya optimize etmek için, ve hatta hareket optimize!

N3337 standart taslak, bölüm 12.8(C 11):

Belli kriterler yerine geldiğinde, bir uygulama atlamak için izin verilir kopyala kopyala/taşı bile sınıf bir nesnenin yapı taşı,/ nesne için yapıcı ve/veya yıkıcı yan etkileri var. İçinde bu gibi durumlarda, uygulama kaynak ve hedef davranır ihmal kopya başvuran sadece iki farklı yolu olarak taşıma işlemi/ aynı nesne ve o nesnenin yıkım gerçekleşir iki nesne helak olacaktı kez daha optimizasyon olmadan./Taşı işlemleri kopyalama,bu elision aradıelision kopyalayınmüsaade edilebilir aşağıdaki şartlar birden çok kopya ortadan kaldırmak için birleştirilebilir):

[...]

[Örnek:

class Thing {
public:
Thing();
   ~Thing();
   Thing(const Thing&);
};

Thing f() {
   Thing t;
   return t;
}

Thing t2 = f();

Burada elision için kriterler sınıf kopya yapıcı Thingiki arama ortadan kaldırmak için birleştirilebilir: yerel otomatik nesne kopyalama işlevinin dönüş değeri olarak geçici bir nesne t f() ve geçici kopyalama nesnesine t2 nesne. Etkili bir şekilde, yerel nesne inşaat t doğrudan t2, ve o nesnenin imha programı gerçekleşecek genel nesne başlatılıyor olarak görülebilir çıkın. Bir hareket Thing yapıcı ekleyerek aynı etkiye sahiptir, ama hareket gelen yapıdır elided t2 geçici nesne. —son örnek]

Kopyalama işlemiyle elision için şartlar ya da aslında tasarruf kaynağı olan karşılanacağı zaman nesne işlevi, parametre ve kopyalanacak nesne lvalue, aşırı bir kararı ile belirlenir kopya için yapıcı ilk nesnenin bir rvalue tarafından belirlenmiş olarak gerçekleştirilir seçin. Aşırı yüklemesi çözünürlük başarısız, ya da seçilen kurucu ilk parametre türü için rvalue başvurusu ise nesnenin (muhtemelen cv-nitelikli), aşırı çözümleme tipi, bir daha, bir nesne gibi düşünen yapılır lvalue.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • SamsTech

    SamsTech

    4 NİSAN 2014