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

Esta pregunta intenta recoger 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 pueden 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 allí afuera. Y no estamos hablando de mal estilo, sino de cosas como deportivas 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 discutiendo tu adició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 propaganda / descripción sobre cada libro que haya leído o se haya beneficiado personalmente. No dude en debatir sobre 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 reseña.

* Nota: las preguntas frecuentes y otros recursos se pueden encontrar en el Información de la etiqueta C ++ y en virtud .

preguntado el 23 de diciembre de 08 a las 03:12

1 Respuestas

Principiante

Introductorio, sin experiencia previa en programación

  • Introducción a C ++ * (Stanley Lippman, Josée Lajoie y Barbara E. Moo) (actualizado para C ++ 11Con 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 con gran detalle. La quinta edición (publicada el 16 de agosto de 2012) cubre C ++ 11. [Revisar]

    * No confundir con C ++ Primer Plus (Stephen Prata), con un resultado significativamente menos favorable crítica.

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

Introductorio, con experiencia previa en programación

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

  • C ++ acelerado (Andrew Koenig y Barbara Moo, 1ra edición - 24 de agosto de 2000) Esto básicamente cubre el mismo terreno que el Introducción a C ++, pero lo hace en una cuarta parte de su espacio. Esto se debe en gran parte a que no intenta ser una introducción a programación, sino una introducción a C + + para personas que han programado previamente en algún otro idioma. Tiene una curva de aprendizaje más pronunciada, pero, para aquellos que pueden hacer frente a esto, es una introducción muy compacta al idioma. (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. [Revisar]

Las Mejores Prácticas

  • C ++ eficaz (Scott Meyers, 3ª 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 se dirige a programadores procedentes de lenguajes como Java. Presenta ~ 50 reglas prácticas fáciles de recordar junto con su fundamento en un estilo muy accesible (y agradable). Para C ++ 11 y C ++ 14, los ejemplos y algunos problemas están desactualizados y se debería preferir C ++ moderno efectivo. [Revisar]

  • C ++ moderno eficaz (Scott Meyers) Esta es básicamente la nueva versión de C ++ eficaz, dirigido a programadores de C ++ que realizan la transición de C ++ 03 a C ++ 11 y C ++ 14.

  • STL eficaz (Scott Meyers) Esto tiene como objetivo hacer lo mismo con la parte de la biblioteca estándar que proviene del STL que C ++ eficaz hizo con el lenguaje en su conjunto: presenta reglas empíricas junto con su razón de ser. [Revisar]


Intermedio

  • C ++ más eficaz (Scott Meyers) Incluso más reglas empíricas que C ++ eficaz. No es tan importante como los del primer libro, pero es bueno saberlo.

  • C ++ excepcional (Herb Sutter) Presentado como un conjunto de acertijos, este tiene una de las mejores y más exhaustivas discusiones sobre la administración adecuada de recursos y la seguridad de excepciones en C ++ a través de la adquisición de recursos es inicialización (RAII), además de una cobertura en profundidad de una variedad de otros temas que incluyen el idioma pimpl, búsqueda de nombres, buen diseño de clases y el modelo de memoria C ++. [Revisar]

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

  • 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. [Revisar]

  • 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, modismos y errores comunes que pueden ayudarlo a escribir código C ++ correcto, comprensible y eficiente. [Revisar]

  • Plantillas C ++: la guía completa (David Vandevoorde y Nicolai M. Josuttis) Este es La libro sobre plantillas tal como existían antes de C ++ 11. Cubre todo, desde los conceptos básicos hasta algunas de las metaprogramaciones de plantillas más avanzadas y explica cada detalle de cómo funcionan las plantillas (tanto conceptualmente como en cómo se implementan) y analiza muchas de las trampas comunes. Tiene excelentes resúmenes de la regla de una definición (ODR) y resolución de sobrecarga en los apéndices. A segunda edición que cubre C ++ 11, C ++ 14 y C ++ 17 ya se ha publicado. [Revisar]

  • C ++ 17: la guía completa (Nicolai M. Josuttis) Este libro describe todas las características nuevas introducidas en el estándar C ++ 17 que cubren todo, desde las simples como 'Variables en línea', 'constexpr if' hasta 'Recursos de memoria polimórfica' y 'Nuevo y Eliminar con datos sobrealineados '. [Revisar]

  • C ++ en acción (Bartosz Milewski). Este libro explica C ++ y sus características mediante la creación de una aplicación desde cero. [Revisar]

  • Programación funcional en C ++ (Ivan Čukić). Este libro presenta técnicas de programación funcional en C ++ moderno (C ++ 11 y posteriores). Una lectura muy agradable para aquellos que quieran aplicar paradigmas de programación funcional a C ++.

  • C ++ profesional (Marc Gregoire, 5.a edición - febrero de 2021) Proporciona un recorrido completo y detallado de la implementación del lenguaje C ++ repleto de consejos profesionales y ejemplos concisos pero informativos en el texto, enfatizando las características de C ++ 20. Utiliza funciones de C ++ 20, como módulos y std::format en todos los ejemplos.


Avanzado

  • Diseño C ++ moderno (Andrei Alexandrescu) Un libro pionero sobre técnicas avanzadas de programación genérica. Introduce el diseño basado en políticas, las listas de tipos y los lenguajes de programación genéricos fundamentales y luego explica cuántos patrones de diseño útiles (incluidos los asignadores de objetos pequeños, los functores, las fábricas, los visitantes y los métodos múltiples) se pueden implementar de manera eficiente, modular y limpia mediante la programación genérica. . [Revisar]

  • 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, incluida la biblioteca de subprocesos, la biblioteca atómica, el modelo de memoria C ++, bloqueos y mutex, así como problemas de diseño y depuración de aplicaciones multiproceso. A segunda edición que cubre C ++ 14 y C ++ 17 ya se ha publicado. [Revisar]

  • Metaprogramación avanzada de C ++ (Davide Di Gennaro) Un manual de técnicas de TMP anterior a C ++ 11, 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 se vuelven obsoletos por los rasgos de tipo, pero las técnicas, no obstante, son útiles de conocer. Si puede soportar el formato / edición peculiar, es más fácil de leer que Alexandrescu y, posiblemente, más gratificante. Para los desarrolladores más experimentados, existe una buena posibilidad de que pueda captar algo sobre un rincón oscuro de C ++ (una peculiaridad) que generalmente solo se logra a través de una amplia experiencia.


Estilo de referencia: todos los niveles

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

  • El C ++11/14/17 Estándar (INCITS / ISO / IEC 14882: 2011/2014/2017) Este, por supuesto, es el árbitro final de todo lo que es o no es C ++. Tenga en cuenta, sin embargo, que está destinado únicamente a ser una referencia para experimentado usuarios dispuestos a dedicar un tiempo y un esfuerzo considerables a su comprensión. El estándar C ++ 17 se publica en formato electrónico por 198 francos suizos.

  • El estándar C ++ 17 está disponible, pero aparentemente no en una forma económica - directamente desde la ISO cuesta 198 francos suizos (unos 200 dólares estadounidenses). Para la mayoría de la gente, borrador final antes de la estandarización es más que adecuado (y gratuito). Muchos preferirán un incluso un borrador más nuevo, documentando 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, quien es un autor muy respetado en C ++. Aunque la lista de elementos es corta, la calidad es alta.

  • El sistema Directrices básicas de C ++ (C ++ 11/14/17 /…) (editado 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 simultaneidad 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 con debates sobre posibles herramientas de apoyo. Muchas reglas están diseñadas específicamente para ser verificadas automáticamente por herramientas de análisis estático.

  • El sistema Super-preguntas frecuentes de C ++ (Marshall Cline, Bjarne Stroustrup y otros) es un esfuerzo de Standard C ++ Foundation para unificar las preguntas frecuentes de C ++ previamente mantenidas individualmente por Marshall Cline y Bjarne Stroustrup y también incorporando nuevas contribuciones. La mayoría de los artículos abordan problemas a un nivel intermedio y, a menudo, están escritos con un tono de humor. Es posible que no todos los elementos estén completamente actualizados con la última edición del estándar C ++.

  • cppreference.com (C ++ 03/11/14/17 /…) (iniciado por Nate Kohl) es una wiki que resume las características básicas del lenguaje central y tiene una extensa 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 / Antiguos

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 quieres saber el porqué el idioma es como es, este libro es donde encuentras las respuestas. Esto cubre todo antes de la estandarización de C ++.

  • Reflexiones sobre C ++ - (Andrew Koenig y Barbara Moo) [Revisar]

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

  • Diseño de software C ++ a gran escala (John Lakos) Lakos explica técnicas para gestionar proyectos de software C ++ muy grandes. Ciertamente, una buena lectura, si solo estuviera actualizada. Fue escrito mucho antes de C ++ 98 y no tiene 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 tomar más de un grano de sal con él. El primer volumen de una nueva edición es lanzado en 2019.

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

  • El manual de referencia de C ++ anotado (Bjarne Stroustrup, Margaret A. Ellis) Este libro está bastante desactualizado en el hecho de que explora la versión C ++ 1989 de 2.0: aún no se han introducido las plantillas, excepciones, espacios de nombres y nuevas versiones. Dicho esto, sin embargo, este libro repasa todo el estándar C ++ de la época explicando el fundamento, las posibles implementaciones y las características del lenguaje. Este no es un libro para aprender los principios y patrones de programación en C ++, sino para comprender todos los aspectos del lenguaje C ++.

  • Pensando en C ++ (Bruce Eckel, 2da edición, 2000). Dos volúmenes; es un estilo tutorial gratuitos conjunto de 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 se const), sin una lista oficial de erratas. Un parcial 3rd La lista de erratas de las partes está disponible en http://www.computersciencelab.com/Eckel.htm, pero aparentemente no se mantiene.

  • C ++ científico y de ingeniería: una introducción a técnicas y ejemplos avanzados (John Barton y Lee Nackman) Es un libro completo y muy detallado que intentó explicar y hacer uso de todas las características disponibles en C ++, en el contexto de métodos numéricos. Introdujo en ese momento 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. Venía con una gran cantidad de código compilable y útil, desde un analizador de expresiones hasta un contenedor de Lapack. El codigo es todavía disponible en línea. Desafortunadamente, los libros se han vuelto algo desactualizados en el estilo y las características de C ++, sin embargo, fue un tour-de-force increíble 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 la semántica de movimientos y las lecciones aprendidas de la STL sería muy buena.

Respondido 14 Feb 21, 10:02

@G Rassovsky: Todos los libros que prometen enseñar X en Y horas. Por ejemplo, aprenda C ++ en 24 horas. Creo que es mejor evitar todos esos libros. - akhil_mittal

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 programación "orientada a objetos", similar a una mala aplicación de los patrones de diseño de GoF. Me pareció un libro introductorio interesante a la programación en general, pero a medida que alguien se familiariza con la programación y (especialmente) la informática en su conjunto, encuentro libros que piensan puramente en términos "clásicos" de OOP perjudiciales para la educación. - usuario1630889

@ 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 clasificados como "no recomendados". - Zaphod Beeblebrox

C ++ acelerado es de 2000. ¿Debo preocuparme de que esté desactualizado? - Aplicaciones Autónomas

Creo que sería bueno poner las fechas de publicación de la edición (con el número de edición en su caso). - Aaron Hall ♦

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.