SORU
28 HAZİRAN 2010, PAZARTESİ


C , hala kötü pratik bir fonksiyonu, bir vektör dönmek için mi?

Kısa versiyon:Ortak diziler—birçok programlama dilleri/vektör olarak büyük nesneler gibi geri dönmek için. Sınıf hareket bir kurucu veya C programcıları/çirkin/iğrenç garip bir düşünün eğer bu tarz C kabul edilebilir 0x?

Uzun versiyon:C 0x bu hala kötü karşılanır?

std::vector<std::string> BuildLargeVector();
...
std::vector<std::string> v = BuildLargeVector();

Geleneksel sürümü bu gibi görünecektir:

void BuildLargeVector(std::vector<std::string>& result);
...
std::vector<std::string> v;
BuildLargeVector(v);

Yeni sürüm değeri BuildLargeVector dönen bir rvalue, v std::vector, varsayarak (N)yapıcı hareket rvt li olmuyor kullanılarak inşa edilecek.

Hatta C 0x önce ilk form genellikle "" (N)rvt li. çünkü verimli olacaktır Ancak, (N)rvt li derleyici takdirine bağlıdır. Rvalue başvurular var şimdigarantilihayır derin anlaşıldı gerçekleşecek.

EditSoru : gerçekten optimizasyon ile ilgili değil. Her iki form da gösterilen aynı gerçek dünyadaki programlarda performans var. Oysa, geçmişte, ilk form sipariş büyüklüğü daha kötü performans sergilemiş olabilir. Sonuç olarak, ilk form uzun bir süre için C programlamada kod büyük bir kokuydu. Artık değil, umarım?

CEVAP
28 HAZİRAN 2010, PAZARTESİ


Dave Abrahams the speed of passing/returning values oldukça kapsamlı bir analiz vardır.

Eğer bir değer vermek gerekirse, kısa cevap, o zaman bir değer döndürür. Derleyici yine yok çünkü çıkış referanslar kullanmayın. Elbette yanlışlıklar var, bu makaleyi okumalısınız.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008
  • Showtime

    Showtime

    21 HAZİRAN 2006