Pertanyaan The Definitive C ++ Book Guide and List


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

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

Harap edit jawaban yang diterima untuk disediakan buku berkualitas dan tingkat keterampilan perkiraan - lebih disukai  setelah  mendiskusikan penambahan Anda di ruang obrolan C ++. (Para 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 / dapatkan manfaatnya secara pribadi. Jangan ragu untuk berdebat kualitas, judul, dll. Buku-buku yang memenuhi kriteria akan ditambahkan ke daftar. Buku yang memiliki ulasan oleh Asosiasi Pengguna C dan C ++ (ACCU) memiliki tautan ke ulasan.

* Catatan: FAQ dan sumber daya lain dapat ditemukan di Info tag C ++ dan dibawah .


4253


asal


Jawaban:


Pemula

Pendahuluan, tidak ada pengalaman pemrograman sebelumnya

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

  • Pemrograman: Prinsip dan Praktik 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 tidak mengasumsikan pengalaman pemrograman sebelumnya, tetapi tidak hanya untuk pemula.

* Tidak menjadi bingung C ++ Primer Plus (Stephen Prata), dengan sangat kurang menguntungkan ulasan.

Pengantar, dengan pengalaman pemrograman sebelumnya

  • Tur C ++ (Bjarne Stroustrup) (Edisi kedua untuk C ++ 17) "Tur" adalah rangkuman tutorial cepat (sekitar 180 halaman dan 14 bab) dari semua standar C ++ (bahasa dan pustaka standar, dan menggunakan C ++ 11) pada tingkat yang cukup tinggi untuk orang-orang yang sudah tahu C ++ atau setidaknya merupakan programmer berpengalaman. Buku ini adalah versi tambahan dari materi yang membentuk Bab 2-5 Bahasa Pemrograman C ++, edisi ke-4.

  • Accelerated C ++ (Andrew Koenig dan Barbara Moo, Edisi 1 - 24 Agustus 2000) Ini pada dasarnya mencakup dasar yang sama dengan C ++ Primer, tetapi melakukannya pada seperempat ruangnya. Ini sebagian besar karena itu tidak berusaha untuk menjadi pengantar pemrograman, tapi pengantar untuk C ++ untuk orang yang sebelumnya telah diprogram dalam beberapa bahasa lain. Ini memiliki kurva belajar yang lebih curam, tetapi, bagi mereka yang dapat mengatasi hal ini, ini adalah pengenalan bahasa yang sangat ringkas. (Secara historis, itu memecah tanah baru dengan menjadi buku pemula pertama yang menggunakan pendekatan modern untuk mengajar bahasa.) Meskipun demikian, C ++ yang diajarkan adalah murni C ++ 98. [Ulasan]

Praktik terbaik

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

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

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

Menengah

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

  • C ++ luar biasa (Herb Sutter) Disajikan sebagai seperangkat teka-teki, ini memiliki salah satu diskusi terbaik dan menyeluruh tentang manajemen sumber daya yang tepat dan keamanan pengecualian di C ++ melalui Resource Acquisition inisialisasi (RAII) di samping cakupan mendalam dari berbagai lainnya topik termasuk idiom pimpl, pencarian nama, desain kelas yang bagus, dan model memori C ++. [Ulasan]

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

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

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

  • C ++ Templates: Panduan Lengkap (David Vandevoorde dan Nicolai M. Josuttis) Ini itu buku tentang templat sebagaimana adanya sebelum C ++ 11. Ini mencakup semuanya, mulai dari yang sangat mendasar hingga beberapa metaprogramming template paling maju dan menjelaskan setiap detail tentang cara kerja templat (baik secara konseptual maupun bagaimana implementasinya) dan membahas banyak jebakan umum. Memiliki ringkasan yang sangat baik dari Aturan Satu Definisi (ODR) dan resolusi yang berlebihan dalam lampiran. SEBUAH edisi kedua meliputi C ++ 11, C ++ 14 dan C ++ 17 telah diterbitkan. [Ulasan]


Maju

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

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

  • C ++ Concurrency In Action (Anthony Williams) Sebuah buku yang mencakup dukungan konkurensi C ++ 11 termasuk perpustakaan benang, perpustakaan atom, model memori C ++, kunci dan muteks, serta masalah merancang dan men-debug aplikasi multithread.

  • Advanced C ++ Metaprogramming (Davide Di Gennaro) Panduan teknik TMP pra-C ++ 11, lebih berfokus pada praktik daripada teori. Ada banyak sekali potongan dalam buku ini, beberapa di antaranya dibuat usang oleh ciri-ciri jenis, tetapi tekniknya, tetap berguna untuk diketahui. Jika Anda bisa memasang dengan format / pengeditan unik, lebih mudah dibaca daripada Alexandrescu, dan bisa dibilang, lebih bermanfaat. Untuk pengembang yang lebih berpengalaman, ada peluang baik bahwa Anda dapat mengambil sesuatu tentang sudut gelap C ++ (permainan kata-kata) yang biasanya hanya terjadi melalui pengalaman yang luas.


Gaya Referensi - Semua Tingkat

  • Bahasa Pemrograman C ++ (Bjarne Stroustrup) (diperbarui untuk C ++ 11) Pengenalan klasik untuk C ++ oleh penciptanya. Ditulis untuk menyejajarkan K & R klasik, ini memang sangat mirip dan mencakup hampir semuanya dari bahasa inti ke pustaka standar, hingga paradigma pemrograman ke falsafah bahasa. [Ulasan] Catatan: Semua rilis standar C ++ dilacak dalam pertanyaan ini: Di mana saya menemukan standar C ++ saat ini.

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

  • C ++ IO Streams and Locales (Angelika Langer dan Klaus Kreft) Ada sedikit yang bisa dikatakan tentang buku ini kecuali bahwa, jika Anda ingin tahu apa pun tentang aliran dan lokal, maka ini adalah satu tempat untuk menemukan jawaban yang pasti. [Ulasan]

C ++ 11/14 Referensi:

  • Standar C ++ (INCITS / ISO / IEC 14882-2011) Ini, tentu saja, adalah wasit terakhir dari semua yang ada atau tidak C ++. Sadarilah, bagaimanapun, bahwa itu dimaksudkan murni sebagai referensi untuk berpengalaman pengguna bersedia mencurahkan banyak waktu dan upaya untuk pemahamannya. Seperti biasa, rilis pertama adalah cukup mahal ($ 300 + US), tetapi sekarang telah dirilis dalam bentuk elektronik seharga $ 60US.

  • Standar C ++ 14 tersedia, tetapi tampaknya tidak dalam bentuk yang ekonomis - langsung dari ISO biayanya 198 Swiss Franc (sekitar $ 200 AS). Bagi kebanyakan orang, itu draft terakhir sebelum standarisasi lebih dari cukup (dan gratis). Banyak yang akan memilih sebuah bahkan draf yang lebih baru, mendokumentasikan fitur baru yang kemungkinan akan dimasukkan dalam C ++ 17.

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

  • Itu C ++ Core Guidelines (C ++ 11/14/17 /…) (Diedit oleh Bjarne Stroustrup dan Herb Sutter) adalah dokumen online yang berkembang yang terdiri dari satu set pedoman untuk menggunakan C ++ modern yang baik. Pedoman ini difokuskan pada masalah yang relatif lebih tinggi tingkat, seperti antarmuka, manajemen sumber daya, manajemen memori dan konkurensi mempengaruhi arsitektur aplikasi dan desain perpustakaan. Proyek itu diumumkan pada CppCon'15 oleh Bjarne Stroustrup dan lain-lain dan menerima kontribusi dari komunitas. 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.

  • Itu C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup dan lain-lain) adalah upaya oleh Standard C ++ Foundation untuk menyatukan FAQ C ++ yang sebelumnya dikelola secara individu oleh Marshall Cline dan Bjarne Stroustrup dan juga menggabungkan kontribusi baru. Item kebanyakan membahas masalah pada tingkat menengah dan sering ditulis dengan nada humor. Tidak semua item dapat sepenuhnya diperbarui dengan edisi terbaru standar C ++.

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


Klasik / Lama

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

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

  • Ruminasi tentang C ++ - (Andrew Koenig dan Barbara Moo) [Ulasan]

  • C ++ Advanced Pemrograman Style dan Idiom (James Coplien) Seorang pendahulu dari gerakan pola, itu menggambarkan banyak "idiom" C ++ - spesifik. Ini tentu saja buku yang sangat bagus dan mungkin masih layak dibaca jika Anda dapat menghemat waktu, tetapi cukup lama dan tidak up-to-date dengan C ++ saat ini.

  • Perangkat Lunak C ++ Skala Besar (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 meleset pada banyak fitur (misalnya ruang nama) yang penting untuk proyek berskala besar. Jika Anda perlu bekerja dalam proyek perangkat lunak C ++ besar, Anda mungkin ingin membacanya, meskipun Anda perlu mengambil lebih dari sebutir garam bersamanya. Volume pertama dari edisi baru diharapkan pada 2018.

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

  • The C ++ Referensi Manual Beranotasi (Bjarne Stroustrup, Margaret A. Ellis) Buku ini cukup usang dalam kenyataan bahwa ini mengeksplorasi versi C ++ 2.0 tahun 1989 - Templat, pengecualian, ruang nama dan cetakan baru belum diperkenalkan. Namun, mengatakan bahwa, buku ini membahas seluruh standar C ++ dari waktu yang menjelaskan alasan, kemungkinan penerapan, dan fitur bahasa. Ini bukan buku untuk mempelajari prinsip dan pola pemrograman di C ++, tetapi untuk memahami setiap aspek dari bahasa C ++.

  • Berpikir dalam C ++ (Bruce Eckel) Dua volume; adalah gaya tutorial bebas set buku tingkat intro. Unduhan: jilid 1, jilid 2. Sayangnya mereka dirusak oleh sejumlah kesalahan sepele (mis. Mempertahankan bahwa para temporer secara otomatis const), tanpa daftar errata resmi. A partial 3rd daftar pihak errata tersedia di (http://www.computersciencelab.com/Eckel.htm), tetapi tampaknya tidak dipertahankan.

  • Ilmiah dan Rekayasa C ++: Suatu Pengantar Teknik dan Contoh Canggih (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. Ini diperkenalkan pada saat beberapa teknik baru, seperti Pola Template Berulang Curiously (CRTP, juga disebut trik Barton-Nackman). Ini memelopori beberapa teknik seperti analisis dimensi dan diferensiasi otomatis. Itu datang dengan banyak kode kompilasi dan berguna, mulai dari pengurai ekspresi ke pembungkus Lapack. Kode masih tersedia di sini: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Sayangnya, buku-buku telah 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 warisan dinamika sedikit rumit untuk dipahami dan tidak terlalu berguna. Versi terbaru dari buku klasik ini yang mencakup semantik gerakan dan pelajaran yang didapat dari STL akan sangat baik.


4015