SORU
10 EYLÜL 2015, PERŞEMBE


C kullanımı 11'In 'oto' performansı artırabilir?

C 11 auto türü doğruluğu ve sürdürülebilirliği artırır anlayabiliyorum. Ayrıca performans (Almost Always Auto Herb Sutter tarafından) geliştirmek okudum, ama iyi bir açıklama özledim.

  • Nasıl auto performansı artırabilir?
  • Herkes bir örnek verebilir mi?

CEVAP
10 EYLÜL 2015, PERŞEMBE


auto performans yardımcı olabilirsessiz örtülü dönüşüm kaçınarak. Çekici bulduğum bir örnek şudur.

std::map<Key, Val> m;
// ...

for (std::pair<Key, Val> const& item : m) {
    // do stuff
}

Böceği gördün mü? Burada, zarif bir şekilde sabit başvuru ile haritanın her eşyayı almak ve bizim niyet açıklığa kavuşturmak dizi için yeni bir ifade kullanıyoruz, ama aslında kopyalama olduğumuzu düşünüyoruzhereleman. Bu std::map<Key, Val>::value_type std::pair<const Key, Val>, std::pair<Key, Val> değil çünkü. Biz (örtülü olarak) sonuç:

std::pair<Key, Val> const& item = *iter;

Varolan bir nesneye bir başvuru almak ve o bırakmak yerine, bir tür dönüşüm yapmak zorundayız. Bir nesne (veya) geçici farklı bir tür için sabit bir referans örtülü bir dönüştürme gibi özellikleri de vardır, örneğin: acele etme hakkınız vardır

int const& i = 2.0; // perfectly OK

Bu tür dönüştürme, bir izin örtük dönüştürme için aynı sebepten dönüştürebilirsiniz const Key Key, ama biz inşa etme geçici bu yeni türü için izin ver. Böylece, etkin bir döngü yapar:

std::pair<Key, Val> __tmp = *iter;       // construct a temporary of the correct type
std::pair<Key, Val> const& item = __tmp; // then, take a reference to it

(Tabii ki, aslında __tmp bir nesne, sadece gösterim amacıyla, gerçekte isimsiz sadece geçici kullanım ömrü için item bağlı) yok.

Sadece değiştirme:

for (auto const& item : m) {
    // do stuff
}

sadece geçici veya dönüşüm gerekli diye kopya bir ton - şimdi başlatıcı tür maçları başvurulan türü kaydedilmiş, sadece doğrudan bir başvuru yapabiliriz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LG Mobile Global

    LG Mobile Gl

    2 EYLÜL 2010
  • LiquidMusick

    LiquidMusick

    23 Aralık 2010
  • steven johns

    steven johns

    11 Mart 2011