Panduan dan Daftar Buku C ++ Definitive

4243

Pertanyaan ini mencoba mengumpulkan beberapa mutiara di antara puluhan buku C ++ buruk yang diterbitkan setiap tahun.

Tidak seperti banyak bahasa pemrograman lain, yang sering diambil di mana saja dari tutorial yang ditemukan di Internet, sedikit yang dapat dengan cepat mengambil C ++ tanpa mempelajari buku C ++ yang ditulis dengan baik. Terlalu besar dan rumit untuk melakukan ini. Bahkan, ini sangat besar dan kompleks, bahwa ada sangat banyak buku C ++ yang sangat buruk di luar sana. Dan kita tidak berbicara tentang gaya buruk, tetapi hal-hal seperti olahraga jelas kesalahan faktual dan mempromosikan gaya pemrograman buruk .

Harap edit jawaban yang diterima untuk memberikan buku - buku berkualitas dan perkiraan tingkat keterampilan - sebaiknya setelah mendiskusikan penambahan Anda di ruang obrolan C ++ . (Pelanggan tetap mungkin tanpa ampun membatalkan pekerjaan Anda jika mereka tidak setuju dengan rekomendasi.) Tambahkan uraian singkat / deskripsi tentang setiap buku yang telah Anda baca / manfaatkan secara pribadi. Jangan ragu untuk memperdebatkan kualitas, judul, dll. Buku yang memenuhi kriteria akan ditambahkan ke daftar. Buku yang memiliki ulasan oleh Asosiasi Pengguna C dan C ++ (ACCU) memiliki tautan ke ulasan tersebut.

* Catatan: FAQ dan sumber daya lainnya dapat ditemukan di info tag C ++ dan di bawah.

sbi
sumber

Jawaban:

4895

Pemula

Pengantar, tidak ada pengalaman pemrograman sebelumnya

  • C ++ Primer * (Stanley Lippman, Josée Lajoie, dan Barbara E. Moo) ( diperbarui untuk C ++ 11 ) Datang pada halaman 1k, ini adalah pengantar yang sangat menyeluruh ke C ++ yang mencakup hampir semua hal dalam bahasa dalam format yang sangat mudah diakses dan dengan sangat detail. Edisi kelima (dirilis 16 Agustus 2012) mencakup C ++ 11. [Ulasan]

  • Pemrograman: Prinsip dan Praktek Menggunakan C ++ (Bjarne Stroustrup, Edisi 2 - 25 Mei 2014) ( diperbarui untuk C ++ 11 / C ++ 14 ) Pengantar pemrograman menggunakan C ++ oleh pencipta bahasa. Bacaan yang bagus, yang mengasumsikan tidak ada pengalaman pemrograman sebelumnya, tetapi tidak hanya untuk pemula.

* Tidak menjadi bingung dengan C ++ Primer Ditambah (Stephen Prata), dengan signifikan kurang menguntungkan tinjauan .

Pendahuluan, dengan pengalaman pemrograman sebelumnya

  • Tur C ++ (Bjarne Stroustrup) ( edisi ke-2 untuk C ++ 17 ) "Tur" ini merupakan ringkasan tutorial singkat (sekitar 180 halaman dan 14 bab) dari semua standar C ++ (bahasa dan perpustakaan standar, dan menggunakan C ++ 11 ) pada level yang cukup tinggi untuk orang yang sudah tahu C ++ atau paling tidak adalah programmer yang berpengalaman. Buku ini adalah versi lanjutan dari materi yang merupakan Bab 2-5 dari Bahasa Pemrograman C ++, edisi ke-4.

  • Akselerasi C ++ (Andrew Koenig dan Barbara Moo, Edisi 1 - 24 Agustus 2000) Ini pada dasarnya mencakup dasar yang sama dengan C ++ Primer , tetapi melakukannya pada keempat ruangnya. Ini sebagian besar karena itu tidak mencoba menjadi pengantar pemrograman , tetapi pengantar C ++ untuk orang-orang yang sebelumnya diprogram dalam bahasa lain. Ini memiliki kurva belajar yang lebih curam, tetapi, bagi mereka yang bisa mengatasinya, ini adalah pengantar yang sangat ringkas untuk bahasa ini. (Secara historis, ini memecahkan landasan baru dengan menjadi buku pemula pertama yang menggunakan pendekatan modern untuk mengajarkan bahasa.) Meskipun demikian, C ++ yang diajarkannya murni C ++ 98. [Ulasan]

Praktik terbaik

  • Efektif C ++ (Scott Meyers, Edisi 3 - 22 Mei 2005) Ini ditulis dengan tujuan menjadi buku kedua terbaik yang harus dibaca oleh programmer C ++, dan berhasil. Edisi sebelumnya ditujukan untuk programmer yang berasal dari C, edisi ketiga mengubah ini dan menargetkan programmer yang berasal dari bahasa seperti Jawa. Ini menyajikan ~ 50 aturan praktis yang mudah diingat bersama dengan alasan mereka dalam gaya yang sangat mudah diakses (dan menyenangkan). Untuk C ++ 11 dan C ++ 14 contoh dan beberapa masalah sudah ketinggalan zaman dan Efektif C ++ Modern harus lebih disukai. [Ulasan]

  • C ++ Modern Efektif (Scott Meyers) Ini pada dasarnya adalah versi baru dari C ++ Efektif , yang ditujukan untuk programmer C ++ membuat transisi dari C ++ 03 ke C ++ 11 dan C ++ 14.

  • STL Efektif (Scott Meyers) Ini bertujuan untuk melakukan hal yang sama ke bagian perpustakaan standar yang berasal dari STL apa yang dilakukan C ++ Efektif terhadap bahasa secara keseluruhan: Ini menyajikan aturan praktis bersama dengan alasan mereka. [Ulasan]

Menengah

  • Lebih Efektif C ++ (Scott Meyers) Bahkan lebih banyak aturan praktis daripada Efektif C ++ . Tidak sepenting yang ada di buku pertama, tetapi masih bagus untuk diketahui.

  • C ++ Luar Biasa (Herb Sutter) Disajikan sebagai serangkaian teka-teki, ini memiliki salah satu diskusi terbaik dan menyeluruh tentang manajemen sumber daya yang tepat dan keselamatan pengecualian dalam C ++ melalui Resource Acquisition is Inisialisasi (RAII) di samping cakupan mendalam dari varietas topik lainnya termasuk idiom jerawat, pencarian nama, desain kelas yang baik, dan model memori C ++. [Ulasan]

  • Lebih Luar Biasa C ++ (Herb Sutter) Meliputi topik keselamatan pengecualian tambahan yang tidak tercakup dalam Luar Biasa C ++ , selain diskusi tentang pemrograman berorientasi objek yang efektif dalam C ++ dan penggunaan STL yang benar. [Ulasan]

  • Gaya C ++ Luar Biasa (Herb Sutter) Membahas pemrograman generik, optimisasi, dan manajemen sumber daya; buku ini juga memiliki eksposisi yang sangat baik tentang bagaimana menulis kode modular dalam C ++ dengan menggunakan fungsi non-anggota dan prinsip tanggung jawab tunggal. [Ulasan]

  • Standar Coding C ++ (Herb Sutter dan Andrei Alexandrescu) "Standar pengkodean" di sini tidak berarti "berapa banyak ruang yang harus saya indentasikan pada kode saya?" Buku ini berisi 101 praktik terbaik, idiom, dan perangkap umum yang dapat membantu Anda menulis kode C ++ yang benar, dapat dimengerti, dan efisien. [Ulasan]

  • C ++ Template: Panduan Lengkap (David Vandevoorde dan Nicolai M. Josuttis) ini adalah yang buku tentang template karena mereka ada sebelum C ++ 11. Ini mencakup semuanya, mulai dari yang paling mendasar hingga beberapa pemrograman metap template yang paling canggih dan menjelaskan setiap detail tentang bagaimana templat bekerja (baik secara konseptual dan bagaimana implementasinya) dan membahas banyak perangkap umum. Memiliki ringkasan yang sangat baik dari One Definition Rule (ODR) dan resolusi kelebihan di lampiran. Sebuah edisi kedua meliputi C ++ 11, C ++ 14 dan C ++ 17 telah sudah diterbitkan. [Ulasan]

  • C ++ 17 - Panduan Lengkap (Nicolai M. Josuttis) Buku ini menjelaskan semua fitur baru yang diperkenalkan dalam Standar C ++ 17 yang mencakup segala sesuatu mulai dari yang sederhana seperti 'Inline Variables', 'constexpr if' hingga 'Polymorphic Sumber Daya Memori 'dan' Baru dan Hapus dengan Data yang tidak selaras '.


Maju

  • Desain C ++ Modern (Andrei Alexandrescu) Buku inovatif tentang teknik pemrograman generik canggih. Memperkenalkan desain berbasis kebijakan, daftar jenis, dan idiom pemrograman generik dasar kemudian menjelaskan berapa banyak pola desain yang berguna (termasuk pengalokasi objek kecil, functors, pabrik, pengunjung, dan multi-metode) dapat diimplementasikan secara efisien, modular, dan bersih menggunakan pemrograman generik . [Ulasan]

  • Metaprogramming Template C ++ (David Abrahams dan Aleksey Gurtovoy)

  • C ++ Concurrency In Action (Anthony Williams) Sebuah buku yang mencakup dukungan konkurensi C ++ 11 termasuk pustaka thread, pustaka atom, model memori C ++, kunci dan mutex, serta masalah perancangan dan debugging aplikasi multithreaded. Sebuah edisi kedua meliputi C ++ 14 dan C ++ 17 telah sudah diterbitkan.

  • Advanced C ++ Metaprogramming (Davide Di Gennaro) Manual pra-C ++ 11 teknik TMP, lebih fokus pada praktik daripada teori. Ada satu ton cuplikan dalam buku ini, beberapa di antaranya dibuat usang berdasarkan sifat-sifat tipenya, tetapi tekniknya, tetap berguna untuk diketahui. Jika Anda bisa tahan dengan format / editing yang unik, lebih mudah dibaca daripada Alexandrescu, dan bisa dibilang, lebih bermanfaat. Untuk pengembang yang lebih berpengalaman, ada peluang bagus bahwa Anda dapat mengambil sesuatu tentang sudut gelap C ++ (sebuah kekhasan) yang biasanya hanya muncul melalui pengalaman yang luas.

  • Pemrograman Fungsional dalam C ++ (Ivan Čukić) Buku ini memperkenalkan pembaca pada paradigma fungsional dalam C ++ modern. Ini mencakup aspek teoritis dan kode dengan berbagai contoh dan diagram. Penulis memiliki pengalaman dalam mengajar dan menggunakannya untuk memandu pembaca dengan lancar melalui berbagai aspek pemrograman fungsional.


Gaya Referensi - Semua Tingkat

  • Bahasa Pemrograman C ++ (Bjarne Stroustrup) ( diperbarui untuk C ++ 11 ) Pengantar klasik C ++ oleh penciptanya. Ditulis secara paralel dengan K&R klasik, ini memang sangat mirip dan mencakup hampir semua hal, mulai dari bahasa inti hingga perpustakaan standar, hingga paradigma pemrograman hingga filosofi bahasa. [Tinjauan] Catatan: Semua rilis standar C ++ dilacak dalam pertanyaan ini: Di mana saya menemukan standar C ++ saat ini .

  • C ++ Standar Perpustakaan Tutorial dan Referensi (Nicolai Josuttis) ( diperbarui untuk C ++ 11 ) The pengenalan dan referensi untuk C ++ Standard Library. Edisi kedua (dirilis pada 9 April 2012) mencakup C ++ 11. [Ulasan]

  • C ++ IO Streaming dan Lokal (Angelika Langer dan Klaus Kreft) Ada sangat sedikit untuk mengatakan tentang buku ini kecuali bahwa, jika Anda ingin tahu apa-apa tentang aliran dan lokal, maka ini adalah satu-satunya tempat untuk menemukan jawaban yang pasti. [Ulasan]

C ++ 11/14/17 / ... Referensi:

  • C ++ 11 / 14 / 17 Standard (INCITS / ISO / IEC 14882: 2011/2014/2017) ini, tentu saja, adalah wasit terakhir dari semua yang atau tidak C ++. Sadarilah, bagaimanapun, bahwa ini dimaksudkan semata-mata sebagai referensi bagi pengguna berpengalaman yang bersedia mencurahkan banyak waktu dan upaya untuk pemahamannya. Standar C ++ 17 dirilis dalam bentuk elektronik untuk 198 Franc Swiss.

  • Standar C ++ 17 tersedia, tetapi tampaknya tidak dalam bentuk ekonomis - langsung dari ISO harganya 198 Franc Swiss (sekitar US $ 200). Bagi kebanyakan orang, draf terakhir sebelum standardisasi lebih dari cukup (dan gratis). Banyak yang lebih suka konsep yang lebih baru , mendokumentasikan fitur-fitur baru yang kemungkinan akan dimasukkan dalam C ++ 20.

  • Ikhtisar C ++ Baru (C ++ 11/14) (hanya PDF) (Scott Meyers) ( diperbarui untuk C ++ 14 ) Ini adalah materi presentasi (slide dan beberapa catatan kuliah) dari kursus pelatihan tiga hari yang ditawarkan oleh Scott Meyers, yang merupakan penulis yang sangat dihormati di C ++. Meskipun daftar barangnya pendek, kualitasnya tinggi.

  • The C Pedoman Inti ++ (C ++ 11/14 / 17 / ...) (disunting oleh Bjarne Stroustrup dan Herb Sutter) adalah dokumen online berkembang yang terdiri dari seperangkat pedoman untuk menggunakan modern C ++ dengan baik. Pedoman ini difokuskan pada masalah tingkat yang relatif lebih tinggi, seperti antarmuka, manajemen sumber daya, manajemen memori dan konkurensi yang memengaruhi arsitektur aplikasi dan desain perpustakaan. Proyek ini diumumkan di CppCon'15 oleh Bjarne Stroustrup dan lainnya dan menyambut baik kontribusi dari masyarakat. Sebagian besar pedoman dilengkapi dengan alasan dan contoh serta diskusi tentang kemungkinan dukungan alat. Banyak aturan yang dirancang khusus untuk secara otomatis dapat diperiksa oleh alat analisis statis.

  • The C ++ Super FAQ (Marshall Cline, Bjarne Stroustrup dan lain-lain) merupakan upaya oleh Standard C ++ Foundation untuk menyatukan C ++ Tanya Jawab sebelumnya dipelihara secara individual oleh Marshall Cline dan Bjarne Stroustrup dan juga menggabungkan kontribusi baru. Sebagian besar item membahas masalah pada tingkat menengah dan sering ditulis dengan nada humor. Tidak semua item mungkin sepenuhnya terkini dengan edisi terbaru standar C ++.

  • cppreference.com (C ++ 03/11/14/17 / ...) (diprakarsai oleh Nate Kohl) adalah wiki yang merangkum fitur-fitur dasar bahasa inti dan memiliki dokumentasi yang luas dari perpustakaan standar C ++. Dokumentasinya sangat tepat tetapi lebih mudah dibaca daripada dokumen standar resmi dan menyediakan navigasi yang lebih baik karena sifat wiki-nya. Proyek mendokumentasikan semua versi standar C ++ dan situs memungkinkan penyaringan tampilan untuk versi tertentu. Proyek ini dipresentasikan oleh Nate Kohl di CppCon'14 .


Klasik / Lebih Tua

Catatan: Beberapa informasi yang terkandung dalam buku-buku ini mungkin tidak mutakhir atau tidak lagi dianggap praktik terbaik.

  • Desain dan Evolusi C ++ (Bjarne Stroustrup) Jika Anda ingin tahu mengapa bahasanya seperti itu, buku ini adalah tempat Anda menemukan jawabannya. Ini mencakup semuanya sebelum standarisasi C ++.

  • Perenungan pada C ++ - (Andrew Koenig dan Barbara Moo) [Ulasan]

  • Advanced C ++ Gaya dan Idiom Pemrograman (James Coplien) Seorang pendahulu dari pergerakan pola, ini menggambarkan banyak C ++ - “idiom” spesifik. Ini tentunya buku yang sangat bagus dan mungkin masih layak dibaca jika Anda dapat meluangkan waktu, tetapi cukup lama dan tidak mutakhir dengan C ++ saat ini.

  • Skala Besar C ++ Desain Perangkat Lunak (John Lakos) Lakos menjelaskan teknik untuk mengelola proyek perangkat lunak C ++ yang sangat besar. Tentu saja, bacaan yang bagus, jika hanya up to date. Itu ditulis jauh sebelum C ++ 98 dan melewatkan banyak fitur (misalnya ruang nama) penting untuk proyek skala besar. Jika Anda perlu bekerja dalam proyek perangkat lunak C ++ besar, Anda mungkin ingin membacanya, meskipun Anda harus mengambil lebih dari sebutir garam. Volume pertama dari edisi baru dirilis pada 2019 .

  • Di dalam C ++ Object Model (Stanley Lippman) Jika Anda ingin tahu bagaimana fungsi anggota virtual umumnya diterapkan dan bagaimana objek dasar biasanya diletakkan dalam memori dalam skenario multi-pewarisan, dan bagaimana semua ini mempengaruhi kinerja, ini adalah tempat Anda akan temukan diskusi menyeluruh tentang topik-topik semacam itu.

  • Manual Referensi C ++ Beranotasi (Bjarne Stroustrup, Margaret A. Ellis) Buku ini cukup ketinggalan zaman karena mengeksplorasi versi C ++ 2.0 1989 - Templat, pengecualian, ruang nama dan pemain baru belum diperkenalkan. Namun demikian, dengan mengatakan bahwa buku ini membahas seluruh standar C ++ saat menjelaskan alasannya, kemungkinan implementasi, dan fitur-fitur dari bahasa tersebut. Ini bukan buku untuk mempelajari prinsip dan pola pemrograman pada C ++, tetapi untuk memahami setiap aspek bahasa C ++.

  • Berpikir dalam C ++ (Bruce Eckel, 2nd Edition, 2000). Dua volume; adalahsettutorial gratis gayaintro tingkat buku. Unduhan: vol 1 , vol 2 . Sayangnya mereka dirusak oleh sejumlah kesalahan sepele (mis. Mempertahankan bahwa temporari secara otomatisconst), tanpa daftar errata resmi. A 3 parsial rd daftar partai ralat tersedia di ( http://www.computersciencelab.com/Eckel.htm ), tapi itu tampaknya tidak terawat.

  • Ilmiah dan Rekayasa C ++: Pengantar Teknik dan Contoh Lanjutan (John Barton dan Lee Nackman) Ini adalah buku yang komprehensif dan sangat rinci yang mencoba menjelaskan dan memanfaatkan semua fitur yang tersedia di C ++, dalam konteks metode numerik. Itu diperkenalkan pada saat itu beberapa teknik baru, seperti Pola Templat Curiously Recurring (CRTP, juga disebut trik Barton-Nackman). Ini memelopori beberapa teknik seperti analisis dimensi dan diferensiasi otomatis. Itu datang dengan banyak kode yang dapat dikompilasi dan berguna, mulai dari parser ekspresi ke pembungkus Lapack. Kode ini masih tersedia di sini: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-plus-an-introduction-9780201533934. Sayangnya, buku-buku menjadi agak ketinggalan zaman dalam gaya dan fitur C ++, namun, itu adalah tur-de-force yang luar biasa pada saat itu (1994, pra-STL). Bab-bab tentang dinamika warisan agak rumit untuk dipahami dan tidak terlalu berguna. Versi terbaru dari buku klasik ini yang mencakup semantik bergerak dan pelajaran dari STL akan sangat menyenangkan.

George Stocker
sumber
402
@G Rassovsky: Semua buku yang berjanji untuk mengajar X dalam Y jam. Misalnya Belajar C ++ dalam 24 jam. Saya percaya semua buku seperti itu sebaiknya dihindari.
akhil_mittal
115
Saya benci menginjak sepatu siapa pun, tetapi saya tidak merekomendasikan "Thinking in C ++" karya Bruce Eckel meskipun saya menghormati penulis karena menerbitkan materi online-nya secara gratis. Perspektif buku ini menunjukkan penggunaan yang relatif buruk atau tidak efektif dari pemrograman C ++ dan "berorientasi objek", mirip dengan penerapan Pola Desain GoF yang buruk. Saya menemukan buku pengantar yang menarik untuk pemrograman secara umum, tetapi ketika seseorang menjadi lebih terbiasa dengan pemrograman dan (terutama) ilmu komputer secara keseluruhan, saya menemukan buku-buku yang berpikir murni dalam istilah "klasik" OOP yang merugikan pendidikan.
30
@ G.Rassovsky di situs web accu.org, ada bagian ulasan buku dengan peringkat. Anda dapat mencari yang C ++. Banyak dari mereka yang dinilai "tidak direkomendasikan".
Zaphod Beeblebrox
83
Accelerated C ++ berasal dari tahun 2000. Haruskah saya khawatir itu sudah ketinggalan zaman?
AutonomousApps
60
Saya pikir akan lebih baik untuk meletakkan tanggal yang diterbitkan untuk edisi (dengan nomor edisi mana yang berlaku).
Aaron Hall