Kesin C ++ Kitap Rehberi ve Listesi
Bu soru, her yıl yayınlanan düzinelerce kötü C ++ kitap arasından birkaç inciyi toplamaya çalışıyor.
İnternette bulunan öğreticilerden sık sık hareket halindeyken alınan diğer birçok programlama dilinin aksine, çok azı iyi yazılmış bir C ++ kitabı çalışmadan C ++ 'yı hızlıca öğrenebilir. Bunu yapmak için çok büyük ve karmaşık. Aslında, o kadar büyük ve karmaşık ki, orada çok fazla çok kötü C ++ kitabı var. Ve biz kötü stilden bahsetmiyoruz, ancak apaçık biçimde bariz olgusal hatalar yapmak ve son derece kötü programlama stillerini desteklemek gibi şeyler .
Kaliteli kitaplar ve yaklaşık bir beceri düzeyi sağlamak için lütfen kabul edilen yanıtı düzenleyin - tercihen C ++ sohbet odasında eklemenizi tartıştıktan sonra . (Düzenli kişiler bir öneriye katılmazlarsa işinizi acımasızca geri alabilir.) Kişisel olarak okuduğunuz / yararlandığınız her kitap hakkında kısa bir tanıtım yazısı / açıklama ekleyin. Kaliteyi, başlıkları vb. Tartışmaktan çekinmeyin. Kriterleri karşılayan kitaplar listeye eklenecektir. C ve C ++ Kullanıcıları Derneği (ACCU) tarafından incelemeleri olan kitapların incelemeye bağlantıları vardır.
* Not: SSS ve diğer kaynaklar C ++ etiket bilgilerinde ve c ++ - faq altında bulunabilir .
Yanıtlar
Acemi
Giriş, önceden programlama deneyimi yok
C ++ Primer * (Stanley Lippman, Josée Lajoie ve Barbara E. Moo) ( C ++ 11 için güncellendi ) 1k sayfalarda geliyor, bu C ++ 'ya çok erişilebilir bir biçimde hemen hemen her şeyi kapsayan çok kapsamlı bir giriş ve ayrıntılı olarak. Beşinci baskı (16 Ağustos 2012'de yayınlandı) C ++ 11'i kapsıyor. [Gözden geçirmek]
* C ++ Primer Plus (Stephen Prata) ile karıştırılmamalıdır, önemli ölçüde daha az olumlu bir inceleme .
Programlama: C ++ Kullanan İlkeler ve Uygulama (Bjarne Stroustrup, 2. Baskı - 25 Mayıs 2014) ( C ++ 11 / C ++ 14 için güncellendi ) Dilin yaratıcısı tarafından C ++ kullanarak programlamaya giriş. Daha önce programlama deneyimi gerektirmeyen, ancak sadece yeni başlayanlar için olmayan iyi bir okuma.
Giriş, önceki programlama deneyimiyle
C ++ Turu (Bjarne Stroustrup) ( C ++ 17 için 2. baskı ) "Tur", tüm standart C ++ (dil ve standart kitaplık ve C ++ kullanma ) için hızlı (yaklaşık 180 sayfa ve 14 bölüm) öğretici bir genel bakıştır. 11 ) C ++ 'ı zaten bilen veya en azından deneyimli programcılar için orta derecede yüksek bir seviyede. Bu kitap, 4. baskı, C ++ Programlama Dili'nin 2-5. Bölümlerini oluşturan materyalin genişletilmiş bir sürümüdür.
Hızlandırılmış C ++ (Andrew Koenig ve Barbara Moo, 1. Baskı - 24 Ağustos 2000) Bu temelde C ++ Primer ile aynı zemini kapsar, ancak bunu alanının dörtte birinde yapar. Bunun nedeni büyük ölçüde programlamaya giriş değil,daha önce başka bir dilde programlamış kişileriçin C ++ 'ya bir giriş olmaya çalışmasıdır. Daha dik bir öğrenme eğrisine sahiptir, ancak bununla başa çıkabilenler için, dile çok kısa bir giriş niteliğindedir. (Tarihsel olarak, dili öğretmek için modern bir yaklaşım kullanan ilk başlangıç kitabı olarak yeni bir çığır açtı.) Buna rağmen öğrettiği C ++ tamamen C ++ 98'dir. [Gözden geçirmek]
En iyi uygulamalar
Etkili C ++ (Scott Meyers, 3. Baskı - 22 Mayıs 2005) Bu, C ++ programcılarının okuması gereken en iyi ikinci kitap olma amacıyla yazılmış ve başarılı olmuştur. Önceki sürümler C'den gelen programcıları hedefliyordu, üçüncü sürüm bunu değiştiriyor ve Java gibi dillerden gelen programcıları hedefliyor. Çok erişilebilir (ve eğlenceli) bir tarzda ~ 50 akılda kalıcı temel kural ve gerekçeleri sunar. C ++ 11 ve C ++ 14 için örnekler ve birkaç sorun güncelliğini yitirmiştir ve Etkili Modern C ++ tercih edilmelidir. [Gözden geçirmek]
Etkili Modern C ++ (Scott Meyers) Bu temelde,C ++ 03'ten C ++ 11 ve C ++ 14'e geçiş yapan C ++ programcılarını hedefleyen Etkili C ++ ' nın yeni sürümüdür.
Etkili STL (Scott Meyers) Bu, STL'den gelen standart kitaplığın bir kısmına Etkili C ++ ' nın bir bütün olarak dile yaptığı şeyi yapmayı amaçlamaktadır: Mantıklarının yanı sıra pratik kuralları da sunar. [Gözden geçirmek]
Orta düzey
Daha Etkili C ++ (Scott Meyers) Etkili C ++ ' dan bile daha fazla pratik kural. İlk kitaptakiler kadar önemli değil ama yine de bilmek güzel.
Olağanüstü C ++ (Herb Sutter) Bir dizi bulmaca olarak sunulan bu, C ++ 'da uygun kaynak yönetimi ve istisna güvenliği ile ilgili en iyi ve kapsamlı tartışmalardan birine, Kaynak Edinme Başlatma (RAII) aracılığıyla çeşitli derinlemesine kapsama ek olarak sahiptir. pimpl deyimi, ad araması, iyi sınıf tasarımı ve C ++ bellek modeli gibi diğer konular. [Gözden geçirmek]
Daha Fazlası Olağanüstü C ++ (Herb Sutter) C ++ ' da etkili nesne tabanlı programlama ve STL'nin doğru kullanımı tartışmasına ek olarak, Olağanüstü C ++' da ele alınmayan ek istisna güvenlik konularını kapsar. [Gözden geçirmek]
Olağanüstü C ++ Stili (Herb Sutter) Genel programlama, optimizasyon ve kaynak yönetimini tartışır; Bu kitap aynı zamanda üye olmayan işlevleri ve tek sorumluluk ilkesini kullanarak C ++ 'da modüler kod yazmanın mükemmel bir açıklamasına sahiptir. [Gözden geçirmek]
C ++ Kodlama Standartları (Herb Sutter ve Andrei Alexandrescu) Buradaki "Kodlama standartları", "koduma kaç boşluk girmeliyim?" Anlamına gelmez. Bu kitap, doğru, anlaşılır ve verimli C ++ kodu yazmanıza yardımcı olabilecek 101 en iyi uygulama, deyim ve yaygın tuzakları içerir. [Gözden geçirmek]
C ++ Şablonlar: Complete Guide (David Vandevoorde ve Nicolai M. Josuttis) Buonlar 11 C ++ önceki şekliyle şablonları hakkında kitap. En temel bilgilerden en gelişmiş şablon metaprogramlamaya kadar her şeyi kapsar ve şablonların nasıl çalıştığına (hem kavramsal olarak hem de nasıl uygulandıklarına) dair her ayrıntıyı açıklar ve birçok yaygın tuzağı tartışır. Mükemmel Tek Tanımlama Kuralı (ODR) özetlerine ve eklerde aşırı yük çözümüne sahiptir. Bir ikinci baskı C ++ 11, C ++ 14 ve C ++ 17 den daha önce yayınlanmıştır. [Gözden geçirmek]
C ++ 17 - Tam Kılavuz (Nicolai M. Josuttis) Bu kitap, C ++ 17 Standardında tanıtılan tüm yeni özellikleri, 'Satır İçi Değişkenler', 'constexpr if' gibi basit olanlardan 'Polimorfik Bellek Kaynakları 've' Aşırı hizalanmış Verilerle Yeni ve Sil '. [Gözden geçirmek]
Eylemde C ++ (Bartosz Milewski). Bu kitap, sıfırdan bir uygulama oluşturarak C ++ ve özelliklerini açıklamaktadır. [Gözden geçirmek]
C ++ 'da Fonksiyonel Programlama (Ivan Čukić). Bu kitap, modern C ++ (C ++ 11 ve sonrası) için işlevsel programlama tekniklerini tanıtır. Fonksiyonel programlama paradigmalarını C ++ 'ya uygulamak isteyenler için çok güzel bir okuma.
ileri
Modern C ++ Tasarımı (Andrei Alexandrescu) Gelişmiş genel programlama teknikleri üzerine çığır açan bir kitap. İlke tabanlı tasarımı, tür listelerini ve temel genel programlama deyimlerini tanıtır ve ardından genel programlama kullanılarak ne kadar yararlı tasarım modelinin (küçük nesne ayırıcılar, işlevler, fabrikalar, ziyaretçiler ve çoklu yöntemler dahil) verimli, modüler ve temiz bir şekilde uygulanabileceğini açıklar . [Gözden geçirmek]
C ++ Şablon Metaprogramlama (David Abrahams ve Aleksey Gurtovoy)
C ++ Eşzamanlılık Eylemi (Anthony Williams) İş parçacığı kitaplığı, atomik kitaplık, C ++ bellek modeli, kilitler ve mutekslerin yanı sıra çok iş parçacıklı uygulamaları tasarlama ve hata ayıklama konularını içeren C ++ 11 eşzamanlılık desteğini kapsayan bir kitap. Bir ikinci baskı C ++ 14 ve C ++ 17 den daha önce yayınlanmıştır. [Gözden geçirmek]
Gelişmiş C ++ Metaprogramlama (Davide Di Gennaro) Teoriden çok uygulamaya odaklanan, C ++ 11 öncesi TMP teknikleri kılavuzu. Bu kitapta, bazıları tür özelliklerine göre geçersiz kılınan, ancak teknikler yine de bilinmesi yararlı olan bir sürü parçacık var. İlginç biçimlendirme / düzenlemeye katlanabiliyorsanız, okumak Alexandrescu'dan daha kolaydır ve tartışmasız daha fazla ödüllendiricidir. Daha deneyimli geliştiriciler için, genellikle yalnızca kapsamlı deneyimlerle ortaya çıkan karanlık bir C ++ köşesi (bir tuhaflık) hakkında bir şeyler öğrenmeniz için iyi bir şans vardır.
Referans Stili - Tüm Seviyeler
C ++ Programlama Dili (Bjarne Stroustrup) ( C ++ 11 için güncellendi ) Yaratıcısı tarafından C ++ 'ya klasik giriş. Klasik K&R ile paralel olarak yazılan bu kitap gerçekten de ona çok benziyor ve temel dilden standart kitaplığa, programlama paradigmalarından dil felsefesine kadar hemen hemen her şeyi kapsıyor. [Gözden Geçirme] Not: C ++ standardının tüm sürümleri, " Geçerli C veya C ++ standart belgelerini nerede bulabilirim? "Sorusunda izlenir.
C ++ Standart kütüphane Eğitimi ve Referans ((Nicolai Josuttis) 11 C ++ için güncellenmiş )C ++ Standart Kütüphanesi için tanıtım ve referans. İkinci baskı (9 Nisan 2012'de yayınlandı) C ++ 11'i kapsar. [Gözden geçirmek]
C ++ IO Akışları ve Yerel Ayarlar (Angelika Langer ve Klaus Kreft) Bu kitap hakkında söylenecek çok az şey var, ancak akışlar ve yerel ayarlar hakkında herhangi bir şey bilmek istiyorsanız, o zaman kesin cevaplar bulabileceğiniz tek yer burasıdır. [Gözden geçirmek]
C ++ 11/14/17 /… Referanslar:
C ++ 11 / 14 / 17 Standart (INCITS / ISO / IEC 14.882: 2011/2014/2017) Bu, tabii ki, ya da C ++ olmayan tüm nihai söz sahibidir. Bununla birlikte, anlaşılması için önemli ölçüde zaman ve çaba harcamak isteyen deneyimli kullanıcılar için tamamen bir referans olarak tasarlandığını unutmayın . C ++ 17 standardı, 198 İsviçre Frangı için elektronik biçimde yayınlandı.
C ++ 17 standardı mevcuttur, ancak görünüşte ekonomik bir formda değildir - doğrudan ISO'dan maliyeti 198 İsviçre Frangı'dır (yaklaşık 200 ABD doları). Çoğu insan için, standardizasyondan önceki son taslak fazlasıyla yeterlidir (ve ücretsizdir). Birçoğu, C ++ 20'ye dahil edilmesi muhtemel yeni özellikleri belgeleyen daha da yeni bir taslağı tercih edecek .
Yeni C ++ 'ya Genel Bakış (C ++ 11/14) ( yalnızca PDF) (Scott Meyers) ( C ++ 14 için güncellendi ) Bunlar, tarafından sunulan üç günlük bir eğitim kursunun sunum materyalleri (slaytlar ve bazı ders notları) C ++ konusunda çok saygın bir yazar olan Scott Meyers. Ürün listesi kısa olsa da kalitesi yüksektir.
C ++ Çekirdek Kuralları (C ++ / 17 11/14 / ...) (Bjarne Stroustrup ve Herb Sutter tarafından düzenlenmiş) iyi ++ Modern C kullanmak için kuralların setinden oluşan gelişmekte olan çevrimiçi bir belgedir. Yönergeler, uygulama mimarisini ve kitaplık tasarımını etkileyen arayüzler, kaynak yönetimi, bellek yönetimi ve eşzamanlılık gibi görece daha yüksek seviyeli konulara odaklanmıştır. Proje, Bjarne Stroustrup ve diğerleri tarafından CppCon'15'te duyuruldu ve topluluğun katkılarını memnuniyetle karşılıyor. Çoğu kılavuz, bir mantık ve örneklerin yanı sıra olası araç desteğiyle ilgili tartışmalarla desteklenmiştir. Çoğu kural, statik analiz araçlarıyla otomatik olarak kontrol edilebilecek şekilde özel olarak tasarlanmıştır.
C ++ Süper SSS (Marshall Cline, Bjarne Stroustrup ve diğerleri) bir önceki Marshall Cline ve Bjarne Stroustrup tarafından bireysel olarak tutulan C ++ SSS birleştirmeye Standart C ++ Vakfı tarafından çaba ve aynı zamanda yeni katkılar içeren olduğunu. Öğeler çoğunlukla sorunları orta düzeyde ele alır ve genellikle mizahi bir tonla yazılır. Tüm öğeler henüz C ++ standardının en son sürümüyle tam olarak güncel olmayabilir.
cppreference.com (C ++ 03/11/14/17 /…) (Nate Kohl tarafından başlatılmıştır) temel çekirdek dil özelliklerini özetleyen ve C ++ standart kitaplığının kapsamlı belgelerine sahip bir wikidir. Belgeler çok kesindir, ancak resmi standart belgeden daha kolay okunur ve wiki yapısı nedeniyle daha iyi gezinme sağlar. Proje, C ++ standardının tüm sürümlerini belgeler ve site, belirli bir sürüm için ekranı filtrelemeye izin verir. Proje, Nate Kohl tarafından CppCon'14'te sunuldu .
Klasikler / Eski
Not: Bu kitapların içerdiği bazı bilgiler güncel olmayabilir veya artık en iyi uygulama olarak kabul edilmeyebilir.
C ++ 'ın Tasarımı ve Evrimi (Bjarne Stroustrup)Dilin neden böyle olduğunu bilmek istiyorsanız, bu kitap cevapları bulacağınız yerdir. Bu, C ++ standardizasyonundan önceki her şeyi kapsar.
C ++ Üzerine Düşünceler - (Andrew Koenig ve Barbara Moo) [Gözden Geçirme]
Gelişmiş C ++ Programlama Stilleri ve Deyimler (James Coplien) Model hareketinin öncülü, birçok C ++ 'ya özgü “deyimi” açıklar. Kesinlikle çok iyi bir kitap ve zaman ayırabilirseniz okumaya değer olabilir, ancak oldukça eski ve mevcut C ++ ile güncel değil.
Büyük Ölçekli C ++ Yazılım Tasarımı (John Lakos) Lakos, çok büyük C ++ yazılım projelerini yönetme tekniklerini açıklar. Elbette, eğer güncel olsaydı iyi bir okuma. C ++ 98'den çok önce yazılmıştır ve büyük ölçekli projeler için önemli olan birçok özelliği (örneğin ad alanları) gözden kaçırır. Büyük bir C ++ yazılım projesinde çalışmanız gerekiyorsa, onu okumak isteyebilirsiniz, ancak bir miktar tuzdan fazlasını almanız gerekir. Yeni baskının ilk cildi 2019'da yayınlandı .
C ++ Nesne Modelinin İçinde (Stanley Lippman) Sanal üye işlevlerinin nasıl yaygın olarak uygulandığını ve temel nesnelerin çoklu miras senaryosunda genellikle bellekte nasıl yerleştirildiğini ve tüm bunların performansı nasıl etkilediğini öğrenmek istiyorsanız, burası bu tür konularla ilgili kapsamlı tartışmalar bulun.
Açıklamalı C ++ Referans El Kitabı (Bjarne Stroustrup, Margaret A. Ellis) Bu kitap, 1989 C ++ 2.0 versiyonunu keşfetmesi nedeniyle oldukça güncel değil - Şablonlar, istisnalar, ad alanları ve yeni yayınlar henüz tanıtılmadı. Bununla birlikte, bu kitabın mantığını, olası uygulamalarını ve dilin özelliklerini açıklayan zamanın tüm C ++ standardından geçtiğini söylüyor. Bu, C ++ üzerinde programlama ilkelerini ve kalıplarını öğrenmek için değil, C ++ dilinin her yönünü anlamak için bir kitaptır.
C ++ 'da Düşünmek (Bruce Eckel, 2. Baskı, 2000). İki cilt; öğretici stil ücretsiz giriş seviyesi kitapları setidir. İndirmeler: cilt 1 , cilt 2 . Maalesef, resmi bir hata
const
listesi olmaksızınbir dizi önemsiz hatayla (örneğin, geçici dosyaların otomatik olarak yapıldığını sürdürmek) gölgelendiler. Kısmi bir 3. taraf hata verileri listesi (http://www.computersciencelab.com/Eckel.htm), ancak görünüşe göre korunmuyor.Bilimsel ve Mühendislik C ++: İleri Tekniklere ve Örneklere Giriş (John Barton ve Lee Nackman) C ++ 'da bulunan tüm özellikleri sayısal yöntemler bağlamında açıklamaya ve kullanmaya çalışan kapsamlı ve çok detaylı bir kitaptır. O sırada, Merakla Yinelenen Şablon Modeli (CRTP, Barton-Nackman numarası olarak da bilinir) gibi birkaç yeni teknik tanıttı. Boyutsal analiz ve otomatik farklılaştırma gibi çeşitli tekniklere öncülük etti. İfade ayrıştırıcısından Lapack sarmalayıcısına kadar birçok derlenebilir ve kullanışlı kodla geldi. Kod hala çevrimiçi olarak mevcuttur . Ne yazık ki, kitaplar stil ve C ++ özelliklerinde biraz modası geçmiş hale geldi, ancak o zamanlar inanılmaz bir güçtü (1994, STL öncesi). Dinamik kalıtımla ilgili bölümler anlaşılması biraz karmaşıktır ve pek kullanışlı değildir. Bu klasik kitabın hareket semantiğini ve STL'den öğrenilen dersleri içeren güncellenmiş bir versiyonu çok iyi olurdu.