La guía y lista definitiva de libros de C ++

4243

Esta pregunta intenta reunir las pocas perlas entre las docenas de libros malos de C ++ que se publican cada año.

A diferencia de muchos otros lenguajes de programación, que a menudo se obtienen sobre la marcha de los tutoriales que se encuentran en Internet, pocos son capaces de aprender rápidamente C ++ sin estudiar un libro de C ++ bien escrito. Es demasiado grande y complejo para hacer esto. De hecho, es tan grande y complejo que hay muchos libros de C ++ muy malos . Y no estamos hablando de un mal estilo, sino de cosas como lucir errores de hecho evidentemente obvios y promover estilos de programación abismalmente malos .

Edite la respuesta aceptada para proporcionar libros de calidad y un nivel de habilidad aproximado, preferiblemente después de discutir su incorporación en la sala de chat de C ++ . (Los clientes habituales podrían deshacer su trabajo sin piedad si no están de acuerdo con una recomendación). Agregue una breve descripción / descripción de cada libro que haya leído / beneficiado personalmente. No dude en debatir la calidad, los títulos, etc. Los libros que cumplan con los criterios se agregarán a la lista. Los libros que tienen reseñas de la Asociación de Usuarios de C y C ++ (ACCU) tienen enlaces a la revisión.

* Nota: Las preguntas frecuentes y otros recursos se pueden encontrar en la información de la etiqueta C ++ y en.

sbi
fuente

Respuestas:

4895

Principiante

Introducción, sin experiencia previa en programación

  • C ++ Primer * (Stanley Lippman, Josée Lajoie y Barbara E. Moo) ( actualizado para C ++ 11 ) Con 1k páginas, esta es una introducción muy completa a C ++ que cubre casi todo en el lenguaje en un formato muy accesible y en gran detalle La quinta edición (lanzada el 16 de agosto de 2012) cubre C ++ 11. [Revisión]

  • Programación: Principios y práctica usando C ++ (Bjarne Stroustrup, 2da edición - 25 de mayo de 2014) ( actualizado para C ++ 11 / C ++ 14 ) Una introducción a la programación usando C ++ por el creador del lenguaje. Una buena lectura, que no supone experiencia previa en programación, pero no es solo para principiantes.

* No debe confundirse con C ++ Primer Plus (Stephen Prata), con una revisión significativamente menos favorable .

Introductorio, con experiencia previa en programación.

  • Un recorrido por C ++ (Bjarne Stroustrup) ( 2a edición para C ++ 17 ) El "recorrido" es una descripción general rápida (alrededor de 180 páginas y 14 capítulos) de todo C ++ estándar (lenguaje y biblioteca estándar, y el uso de C ++ 11 ) a un nivel moderadamente alto para las personas que ya conocen C ++ o al menos son programadores experimentados. Este libro es una versión extendida del material que constituye los capítulos 2-5 del lenguaje de programación C ++, cuarta edición.

  • C ++ acelerado (Andrew Koenig y Barbara Moo, primera edición, 24 de agosto de 2000) Esto básicamente cubre el mismo terreno que el C ++ Primer , pero lo hace en un cuarto de su espacio. Esto se debe principalmente a que no intenta ser una introducción a la programación , sino una introducción a C ++ para las personas que previamente han programado en otro lenguaje. Tiene una curva de aprendizaje más pronunciada, pero, para aquellos que pueden hacer frente a esto, es una introducción muy compacta al lenguaje. (Históricamente, abrió nuevos caminos al ser el primer libro para principiantes en utilizar un enfoque moderno para enseñar el idioma). A pesar de esto, el C ++ que enseña es puramente C ++ 98. [Revisión]

Mejores prácticas

  • Efectivo C ++ (Scott Meyers, 3ra edición - 22 de mayo de 2005) Esto fue escrito con el objetivo de ser el mejor segundo libro que los programadores de C ++ deberían leer, y tuvo éxito. Las ediciones anteriores estaban dirigidas a programadores procedentes de C, la tercera edición cambia esto y apunta a los programadores procedentes de lenguajes como Java. Presenta ~ 50 reglas básicas fáciles de recordar junto con su justificación en un estilo muy accesible (y agradable). Para C ++ 11 y C ++ 14, los ejemplos y algunos problemas están desactualizados y se debe preferir Eficaz Modern C ++. [Revisión]

  • Effective Modern C ++ (Scott Meyers) Esta es básicamente la nueva versión de Effective C ++ , dirigida a programadores de C ++ que hacen la transición de C ++ 03 a C ++ 11 y C ++ 14.

  • Effective STL (Scott Meyers)Tiene comoobjetivo hacer lo mismo con la parte de la biblioteca estándar que proviene de STL, lo que Effective C ++ le hizo al lenguaje en su conjunto: presenta reglas generales junto con su justificación. [Revisión]

Intermedio

  • C ++ más efectivo (Scott Meyers) Incluso más reglas generales que C ++ efectivo . No es tan importante como los del primer libro, pero aún así es bueno saberlo.

  • Excepcional C ++ (Herb Sutter) Presentado como un conjunto de acertijos, este tiene una de las mejores y minuciosas discusiones sobre el manejo adecuado de los recursos y la seguridad excepcional en C ++ a través de la adquisición de recursos es la inicialización (RAII) además de la cobertura en profundidad de una variedad de otros temas, incluyendo el modismo de pimpl, búsqueda de nombres, buen diseño de clase y el modelo de memoria C ++. [Revisión]

  • Más Excepcional C ++ (Herb Sutter) Cubre temas de seguridad de excepción adicionales no cubiertos en Excepcional C ++ , además de la discusión de la programación eficaz orientada a objetos en C ++ y el uso correcto de la STL. [Revisión]

  • Estilo C ++ excepcional (Herb Sutter) Analiza la programación genérica, la optimización y la gestión de recursos; Este libro también tiene una excelente exposición de cómo escribir código modular en C ++ mediante el uso de funciones que no son miembros y el principio de responsabilidad única. [Revisión]

  • Estándares de codificación C ++ (Herb Sutter y Andrei Alexandrescu) "Estándares de codificación" aquí no significa "¿cuántos espacios debo sangrar mi código?" Este libro contiene 101 mejores prácticas, expresiones idiomáticas y dificultades comunes que pueden ayudarlo a escribir código C ++ correcto, comprensible y eficiente. [Revisión]

  • Plantillas C ++: la guía completa (David Vandevoorde y Nicolai M. Josuttis) Este es el libro sobre plantillas tal como existían antes de C ++ 11. Cubre todo, desde lo más básico hasta algunas de las metaprogramaciones de plantillas más avanzadas y explica cada detalle de cómo funcionan las plantillas (tanto conceptualmente como cómo se implementan) y discute muchos errores comunes. Tiene excelentes resúmenes de la Regla de una definición (ODR) y la resolución de sobrecarga en los apéndices. Ya se ha publicadouna segunda edición que cubre C ++ 11, C ++ 14 y C ++ 17. [Revisión]

  • C ++ 17 - La guía completa (Nicolai M. Josuttis) Este libro describe todas las nuevas características introducidas en el Estándar C ++ 17 que cubren todo, desde las simples como 'Inline Variables', 'constexpr if' hasta 'Polymorphic Recursos de memoria 'y' Nuevo y eliminar con datos sobrealineados '.


Avanzado

  • Diseño moderno de C ++ (Andrei Alexandrescu) Un libro innovador sobre técnicas avanzadas de programación genérica. Presenta un diseño basado en políticas, listas de tipos y expresiones genéricas de programación genéricas, luego explica cuántos patrones de diseño útiles (incluidos los asignadores de objetos pequeños, functores, fábricas, visitantes y métodos múltiples) se pueden implementar de manera eficiente, modular y limpia utilizando programación genérica . [Revisión]

  • Metaprogramación de plantillas C ++ (David Abrahams y Aleksey Gurtovoy)

  • Concurrencia de C ++ en acción (Anthony Williams) Un libro que cubre el soporte de concurrencia de C ++ 11 que incluye la biblioteca de subprocesos, la biblioteca atómica, el modelo de memoria C ++, bloqueos y mutexes, así como cuestiones de diseño y depuración de aplicaciones multiproceso. Ya se ha publicadouna segunda edición que abarca C ++ 14 y C ++ 17.

  • Metaprogramación avanzada de C ++ (Davide Di Gennaro) Un manual anterior a C ++ 11 de técnicas TMP, centrado más en la práctica que en la teoría. Hay un montón de fragmentos en este libro, algunos de los cuales quedan obsoletos por los rasgos de tipo, pero las técnicas, sin embargo, son útiles para conocer. Si puede soportar el peculiar formato / edición, es más fácil de leer que Alexandrescu y, posiblemente, más gratificante. Para los desarrolladores más experimentados, hay una buena posibilidad de que puedas aprender algo sobre un rincón oscuro de C ++ (una peculiaridad) que generalmente solo se produce a través de una amplia experiencia.

  • Programación funcional en C ++ (Ivan Čukić) El libro presenta al lector el paradigma funcional en C ++ moderno. Cubre los aspectos teóricos y de código con una variedad de ejemplos y diagramas. El autor tiene experiencia en la enseñanza y la utiliza para guiar sin problemas al lector a través de diferentes aspectos de la programación funcional.


Estilo de referencia: todos los niveles

  • El lenguaje de programación C ++ (Bjarne Stroustrup) ( actualizado para C ++ 11 ) La introducción clásica a C ++ por su creador. Escrito en paralelo al clásico K&R, esto de hecho se lee mucho y cubre casi todo, desde el lenguaje central hasta la biblioteca estándar, desde los paradigmas de programación hasta la filosofía del lenguaje. [Revisión] Nota: Todas las versiones del estándar C ++ se rastrean en esta pregunta: ¿Dónde puedo encontrar el estándar C ++ actual ?

  • C ++ estándar Biblioteca Tutorial y Referencia (Nicolai Josuttis) ( actualizado para C ++ 11 ) La introducción y referencia para la Biblioteca C ++ estándar. La segunda edición (lanzada el 9 de abril de 2012) cubre C ++ 11. [Revisión]

  • Las transmisiones y configuraciones regionales de C ++ IO (Angelika Langer y Klaus Kreft) Hay muy poco que decir sobre este libro, excepto que, si desea saber algo sobre transmisiones y configuraciones regionales, este es el único lugar para encontrar respuestas definitivas. [Revisión]

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

  • Los C ++ 11 / 14 / 17 estándar (INCITS / ISO / IEC 14882: 2011/2014/2017) Esto, por supuesto, es el árbitro final de todo lo que es o no es C ++. Sin embargo, tenga en cuenta que está destinado únicamente como una referencia para usuarios experimentados dispuestos a dedicar un tiempo y esfuerzo considerables a su comprensión. El estándar C ++ 17 se lanzó en forma electrónica para 198 francos suizos.

  • El estándar C ++ 17 está disponible, pero aparentemente no en una forma económica: directamente de la ISO , cuesta 198 francos suizos (alrededor de $ 200 US). Para la mayoría de las personas, el borrador final antes de la estandarización es más que adecuado (y gratuito). Muchos preferirán un borrador aún más nuevo , que documente las nuevas características que probablemente se incluirán en C ++ 20.

  • Descripción general del nuevo C ++ (C ++ 11/14) (solo PDF) (Scott Meyers) ( actualizado para C ++ 14 ) Estos son los materiales de presentación (diapositivas y algunas notas de clase) de un curso de capacitación de tres días ofrecido por Scott Meyers, que es un autor muy respetado en C ++. Aunque la lista de artículos es corta, la calidad es alta.

  • Las Pautas principales de C ++ (C ++ 11/14/17 /…) (editadas por Bjarne Stroustrup y Herb Sutter) es un documento en línea en evolución que consta de un conjunto de pautas para usar bien C ++ moderno. Las directrices se centran en cuestiones de nivel relativamente superior, como interfaces, gestión de recursos, gestión de memoria y concurrencia que afectan la arquitectura de la aplicación y el diseño de la biblioteca. El proyecto fue anunciado en CppCon'15 por Bjarne Stroustrup y otros y agradece las contribuciones de la comunidad. La mayoría de las pautas se complementan con una justificación y ejemplos, así como debates sobre el posible soporte de herramientas. Muchas reglas están diseñadas específicamente para ser verificables automáticamente por herramientas de análisis estático.

  • El C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup y otros) es un esfuerzo de la Fundación Standard C ++ para unificar las preguntas frecuentes de C ++ mantenidas previamente individualmente por Marshall Cline y Bjarne Stroustrup y también incorporando nuevas contribuciones. Los artículos abordan principalmente problemas en un nivel intermedio y a menudo están escritos con un tono humorístico. No todos los elementos pueden estar completamente actualizados con la última edición del estándar C ++ todavía.

  • cppreference.com (C ++ 03/11/14/17 / ...) (iniciado por Nate Kohl) es un wiki que resume las características básicas del lenguaje central y tiene una amplia documentación de la biblioteca estándar de C ++. La documentación es muy precisa, pero es más fácil de leer que el documento estándar oficial y proporciona una mejor navegación debido a su naturaleza wiki. El proyecto documenta todas las versiones del estándar C ++ y el sitio permite filtrar la pantalla para una versión específica. El proyecto fue presentado por Nate Kohl en CppCon'14 .


Clásicos / Mayores

Nota: Es posible que parte de la información contenida en estos libros no esté actualizada o ya no se considere la mejor práctica.

  • El diseño y la evolución de C ++ (Bjarne Stroustrup) Si desea saber por qué el lenguaje es como es, este libro es donde encontrará las respuestas. Esto cubre todo antes de la estandarización de C ++.

  • Reflexiones sobre C ++ - (Andrew Koenig y Barbara Moo) [Revisión]

  • Estilos y modismos de programación avanzada de C ++ (James Coplien) Un predecesor del movimiento del patrón, describe muchos "modismos" específicos de C ++. Sin duda, es un libro muy bueno y podría valer la pena leerlo si puede dedicarle tiempo, pero es bastante antiguo y no está actualizado con el C ++ actual.

  • Diseño de software C ++ a gran escala (John Lakos) Lakos explica técnicas para administrar proyectos de software C ++ muy grandes. Ciertamente, una buena lectura, si solo estuviera actualizada. Fue escrito mucho antes de C ++ 98 y pierde muchas características (por ejemplo, espacios de nombres) importantes para proyectos a gran escala. Si necesita trabajar en un gran proyecto de software C ++, es posible que desee leerlo, aunque debe llevar más de un grano de sal. El primer volumen de una nueva edición se lanza en 2019 .

  • Dentro del modelo de objetos de C ++ (Stanley Lippman) Si desea saber cómo se implementan comúnmente las funciones de miembro virtual y cómo los objetos base se presentan comúnmente en la memoria en un escenario de herencia múltiple, y cómo todo esto afecta el rendimiento, aquí es donde encuentre discusiones exhaustivas de tales temas.

  • Manual de referencia anotado de C ++ (Bjarne Stroustrup, Margaret A. Ellis) Este libro está bastante desactualizado en el hecho de que explora la versión C ++ 2.0 de 1989: aún no se han introducido plantillas, excepciones, espacios de nombres y nuevos modelos. Sin embargo, al decir eso, este libro pasa por todo el estándar C ++ de la época explicando la justificación, las posibles implementaciones y las características del lenguaje. Este no es un libro para aprender principios y patrones de programación en C ++, sino para comprender todos los aspectos del lenguaje C ++.

  • Pensando en C ++ (Bruce Eckel, 2ª edición, 2000). Dos tomos; es unconjunto gratuito de estilo tutorialde libros de nivel de introducción. Descargas: vol 1 , vol 2 . Desafortunadamente, están marcados por una serie de errores triviales (por ejemplo, mantener que los temporales son automáticosconst), sin una lista oficial de erratas. Un parcial de 3 rd lista de erratas partido está disponible en ( http://www.computersciencelab.com/Eckel.htm ), pero al parecer no ha mantenido.

  • Scientific and Engineering C ++: una introducción a las técnicas avanzadas y ejemplos (John Barton y Lee Nackman) Es un libro completo y muy detallado que intentó explicar y utilizar todas las características disponibles en C ++, en el contexto de los métodos numéricos. En su momento introdujo varias técnicas nuevas, como el Patrón de plantilla curiosamente recurrente (CRTP, también llamado truco de Barton-Nackman). Fue pionera en varias técnicas, como el análisis dimensional y la diferenciación automática. Vino con una gran cantidad de código compilable y útil, que va desde un analizador de expresiones hasta un contenedor Lapack. El código todavía está disponible aquí: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. Desafortunadamente, los libros se han vuelto algo obsoletos en el estilo y las características de C ++, sin embargo, fue un increíble tour-de-force en ese momento (1994, pre-STL). Los capítulos sobre herencia dinámica son un poco complicados de entender y no muy útiles. Una versión actualizada de este libro clásico que incluye semántica de movimiento y las lecciones aprendidas del STL sería muy buena.

George Stocker
fuente
402
@G Rassovsky: Todos los libros que prometen enseñar X en Y horas. Por ejemplo, aprender C ++ en 24 horas. Creo que es mejor evitar todos esos libros.
akhil_mittal
115
Odio pisar los zapatos de nadie, pero no recomiendo "Thinking in C ++" de Bruce Eckel, aunque respeto al autor por publicar sus materiales en línea de forma gratuita. La perspectiva del libro sugiere un uso relativamente pobre o ineficaz de C ++ y la programación "orientada a objetos", similar a la mala aplicación de los Patrones de Diseño GoF. Me pareció un libro introductorio interesante para la programación en general, pero a medida que alguien se familiariza más con la programación y (especialmente) la informática en general, encuentro libros que piensan exclusivamente en términos "clásicos" de OOP perjudiciales para la educación.
30
@ G.Rassovsky en el sitio web accu.org, hay una sección de reseñas de libros con calificaciones. Puede buscar los de C ++. Muchos de ellos están calificados como "no recomendados".
Zaphod Beeblebrox
83
C ++ acelerado es de 2000. ¿Debería preocuparme que esté desactualizado?
AutonomousApps
6060
Creo que sería bueno poner las fechas publicadas para la edición (con el número de edición donde corresponda).
Aaron Hall