2011-03-30 12 views
48

"Endl" fiyasko hakkında tek bir astar attığında google talk by Andrei Alexandrescu on the D programming dilini dinliyordum. Sonunda bir çizginin sonunu belirtmek ve arabayı bir akış için yıkamak için tercih edilen bir yol olduğunu düşündüm. Neden fiyasko sayılır? Kodumda kullanmamalı mıyım?C++ iostream endl fiyasko nedir?

+3

Post it! Yapışkan kağıt! –

+1

@ildjarn:% 100 haklısınız. Tamponları yıkadığını biliyordum ve hala [CEO 2008] 'de (75. puan) kaybettim (http://ceoi2008.de/en/welcome)! Kötü alışkanlıklar! – ybungalobill

+1

@ildjarn Öğretmenim, 'std :: endl' yerine '\ n' yerine herşeyi kullandığımız konusunda ısrar ediyor; Ama sonra tekrar sadece basit konsol programları yazıyoruz. Ama sonra tekrar tekrar, bir döngüde bir (POD) değişkeni başlatma potansiyel bir performans sorunu olduğunu düşünmek gibi görünüyor ... – Maxpm

cevap

69

benim yorumun yeniden gönderiliyor:

(ı varsayalım) O sadece birçok özellikle yeni, C++ programcıları gereksiz yere sık ateş basması ve potansiyel berbat onların programın performansını yapım Yenisatır için std::endl gözü kapalı yerine '\n' kullanmak anlamına gelir.

yanı, çoğu insan std::endl çok nadiren gerekli ya da uygun bunu temizlemek için bile olsa bir akışı içine bir yeni satır eklemek için kurallı yolu olduğunu öğretilir.

O yüzden nadiren uygun olup bir önemli yazarak tasarruf '\n' << std::flush üzerinde zaten olarak std::endl bile, standart olmaması gerektiğini bazı insanların görüş (* öksürük *) 'dir.


TL; DR (ler) : Sonunda

  • , std::endlgenellikle kötü performans ve genellikle daha yazarak dışında size hiçbir şey satın alır.
  • Onun kullanımları vardır, ancak bunlar öneririm en büyük codebases kullanım sıklığına göre oldukça nadirdir, bu nedenle ...
  • Onun yarar tartışmaya çok açık ve aynı anda her yerde saçma - bir fiyasko gerçekten!
+2

Sadece programınız çok sayıda stream-based I/O yapıyorsa o zaman gerçekten bir sorun. – dreamlax

+43

AFAIK, bazı insanlar, '\ n' **' nin C'deki yeni satır olduğunu ve \ n'-> platforma özel satır sonlandırıcı dönüşümünün olduğunu bilmeden, bir satırsonu eklemenin "platform nötr" yolu olduğunu düşünür. akış tarafından ele alınır. –

+6

Burada erken optimizasyon konuşuyor muyuz? Çıktınız için kullanmak için son kullanma basit bir şey kullanmak çok güzel. Özellikle dili öğreniyor ve çıktı almak için '\ n' nin ne yapacağını hemen göremiyorsanız. Kodunuzu öğrenmeyi öğrendikten sonra, diğer seçenekleri göz önünde bulundurabilirsiniz! –