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

  • discokatze

    discokatze

    23 EYLÜL 2009
  • OVERWERK

    OVERWERK

    6 Temmuz 2010
  • Ryan Billy

    Ryan Billy

    30 EKİM 2006