SORU
29 Kasım 2010, PAZARTESİ


push_back vs emplace_back

Biraz fark konusunda kafası karışık push_back ve emplace_back arasında kaldım.

void emplace_back(Type&& _Val);
void push_back(const Type& _Val);
void push_back(Type&& _Val);

Push_back aşırı rvalue başvuru alma gibi oldukça emplace_back amacı olur anlamadım?

CEVAP
29 Kasım 2010, PAZARTESİ


Dedi ki: ne ek olarak

Fonksiyon void emplace_back(Type&& _Val) MSCV10 tarafından sağlanan sizin de belirttiğiniz gibi kesinlikle push_back(Type&& _Val) eşdeğer olduğundan uygun olmayan ve gereksiz.

Ama emplace_back şeklinde çok yararlıdır gerçek C 0 x: void emplace_back(Args&&...);

value_type almak yerine bağımsız değişken variadic bir listesini alır, şimdi mükemmel bir argüman ileri ve doğrudan geçici olmadan bir kabın içine bir nesne oluşturmak hiç anlamına gelir.

O rvt li ve hareket semantik ne olursa olsun hala bir push_back gereksiz kopyalar (veya hareket) en karmaşık durumlar var masaya getirmek için kullanışlıdır. Örneğin, geleneksel insert() fonksiyon std::map, oluşturmak için bir geçici, sonra da kopyalanacak bir std::pair<Key, Value>, sonra da kopyalanacak içine harita :

std::map<int, Complicated> m;
int anInt = 4;
double aDouble = 5.0;
std::string aString = "C  ";

// cross your finger so that the optimizer is really good
m.insert(std::make_pair(4, Complicated(anInt, aDouble, aString))); 

// should be easier for the optimizer
m.emplace(4, anInt, aDouble, aString);

Neden MSVC emplace_back doğru sürümü uygulamak olmadı ? Aslında Visual C blog aynı soruyu sordum ben de bir süre önce rahatsız. İşte Stephan gelen cevap T Lavavej, Microsoft Visual C standart kütüphane uygulaması resmi yazar.

Soru : beta 2 emplace fonksiyonları şu an tutucu falan mısın ?

, Variadic şablonları bildiğiniz Gibi bir : VC10 uygulanan değil. Biz işleyişi ile onları taklit işler makine gibi make_shared<T>(), demet ve yeni <functional> şeyler. Bu basit makine nispeten zor kullanmak ve korumak. Ayrıca, önemli ölçüde derleme etkiler sürekli olarak hız, subheaders vardır. Bir nedeniyle bizim zaman kısıtlamaları kombinasyonu ve derleme endişeleri, hız variadic şablonları taklit yok emplace bizim fonksiyonlar.

Variadic şablonları zaman derleyici uygulanır, yararlanmak edeceğiz bekliyoruz kütüphanelerde onları da dahil olmak üzere emplace fonksiyonları. Alıyoruz çok ciddiyim, ama uygunluğu ne yazık ki her şey yapamayız tek seferde.

Anlaşılabilir bir karar. Basit hileler nasıl korkunç ve iğrenç şeyler oluyor ile sadece bir kez variadic şablon taklit etmeye çalışan herkese.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • discokatze

    discokatze

    23 EYLÜL 2009
  • Grace Su

    Grace Su

    6 Ocak 2006
  • SamsTech

    SamsTech

    4 NİSAN 2014