Pregunta La guía y la lista definitiva de libros en C ++


Esta pregunta intenta recopilar 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 recogen sobre la marcha de los tutoriales que se encuentran en Internet, pocos son capaces de recoger rápidamente C ++ sin estudiar un libro en C ++ bien escrito. Es demasiado grande y complejo para hacer esto. De hecho, es tan grande y complejo que hay muchos libros C ++ muy malos allí afuera. Y no estamos hablando de un mal estilo, pero cosas como el deporte errores evidentes obvios y promoviendo estilos de programación abismalmente malos.

Por favor, edite la respuesta aceptada para proporcionar libros de calidad y un nivel de habilidad aproximado - preferiblemente  después  discutiendo su adición en la sala de chat de C ++. (Los clientes habituales podrían deshacer sin piedad su trabajo si no están de acuerdo con una recomendación.) Agregue una breve descripción / publicidad sobre cada libro que usted haya leído / beneficiado personalmente. Siéntase libre de debatir sobre calidad, encabezados, etc. Los libros que cumplan con los criterios se agregarán a la lista. Los libros que tienen revisiones 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 Información de etiqueta C ++ Y debajo .


4253


origen


Respuestas:


Principiante

Experiencia de programación introductoria, sin experiencia previa

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

  • Programación: principios y práctica con C ++ (Bjarne Stroustrup, 2ª 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 presupone experiencia de programación previa, pero no solo para principiantes.

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

Introductorio, con experiencia previa en programación

  • Un recorrido por C ++ (Bjarne Stroustrup) (2ª edición para C ++ 17) El "recorrido" es una descripción general del tutorial rápido (aproximadamente 180 páginas y 14 capítulos) de todo el C ++ estándar (biblioteca de idiomas y estándar, y usando 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 de The C ++ Programming Language, 4ta 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 C ++ Primer, pero lo hace en un cuarto de su espacio. Esto se debe en gran parte a que no intenta ser una introducción a programación, pero una introducción a C ++ para las personas que han programado previamente en 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ó un nuevo camino al ser el primer libro para principiantes en utilizar un enfoque moderno para enseñar el idioma.) A pesar de esto, el C ++ enseña que es puramente C ++ 98. [Revisión]

Mejores prácticas

  • Eficaz 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 ++ deben leer, y tuvo éxito. Las ediciones anteriores estaban dirigidas a programadores provenientes de C, la tercera edición cambia esto y se dirige a programadores provenientes 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 algunas cuestiones están desactualizados y se debe preferir el C ++ efectivo moderno. [Revisión]

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

  • Eficaz STL (Scott Meyers) Esto tiene como objetivo hacer lo mismo con la parte de la biblioteca estándar que proviene de la STL qué Eficaz C ++ hizo al lenguaje como un todo: presenta reglas generales junto con su fundamento. [Revisión]

Intermedio

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

  • Excepcional C ++ (Herb Sutter) Presentada como un conjunto de acertijos, presenta una de las mejores y más completas discusiones sobre la administración de recursos y la seguridad de excepciones en C ++ a través de la Inicialización de Adquisición de Recursos (RAII), además de la cobertura en profundidad de una variedad de otros temas como el idioma 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 efectiva orientada a objetos en C ++ y el uso correcto de la STL. [Revisión]

  • Excepcional estilo C ++ (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 no miembro 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 debería sangrar mi código?" Este libro contiene 101 mejores prácticas, expresiones idiomáticas y errores comunes que pueden ayudarlo a escribir de forma correcta, comprensible y código eficiente de C ++. [Revisión]

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


Avanzado

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

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

  • C ++ concurrencia en acción (Anthony Williams) Un libro que cubre el soporte de simultaneidad C ++ 11 incluyendo la biblioteca de subprocesos, la biblioteca atómica, el modelo de memoria C ++, bloqueos y mutexes, así como los problemas de diseño y depuración de aplicaciones multiproceso.

  • Metaprogramación avanzada de C ++ (Davide Di Gennaro) Un manual anterior a C ++ 11 de técnicas TMP, se centró 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 para saber. Si puede soportar el peculiar formateo / edición, es más fácil de leer que Alexandrescu y podría decirse que es más gratificante. Para los desarrolladores más experimentados, hay una buena posibilidad de que puedas elegir algo sobre un rincón oscuro de C ++ (un capricho) que generalmente solo se logra a través de una amplia experiencia.


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 para que coincida con el clásico K & R, de hecho se parece mucho a él y cubre casi todo, desde el lenguaje central a la biblioteca estándar, a los paradigmas de programación a la filosofía del lenguaje. [Revisión] Nota: Todas las versiones del estándar C ++ se rastrean en esta pregunta: ¿Dónde encuentro el estándar actual de C ++?.

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

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

C ++ 11/14 Referencias:

  • El estándar C ++ (INCITS / ISO / IEC 14882-2011) Esto, por supuesto, es el árbitro final de todo lo que es o no es C ++. Tenga en cuenta, sin embargo, que está destinado puramente como una referencia para experimentado usuarios dispuestos a dedicar un tiempo y esfuerzo considerables para su comprensión. Como de costumbre, el primer lanzamiento fue bastante caro ($ 300 + US), pero ahora se ha lanzado en forma electrónica por $ 60US.

  • El estándar C ++ 14 está disponible, pero aparentemente no de forma económica: directamente desde el 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 incluso un borrador más nuevo, documentando nuevas características que probablemente se incluirán en C ++ 17.

  • Descripción general de la nueva C ++ (C ++ 11/14) (solo PDF) (Scott Meyers) (actualizado para C ++ 1y / 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 elementos es corta, la calidad es alta.

  • los Directrices centrales de C ++ (C ++ 11/14/17 / ...) (editado por Bjarne Stroustrup y Herb Sutter) es un documento en línea en evolución que consiste en un conjunto de pautas para usar bien el moderno C ++. Las directrices se centran en problemas de nivel relativamente superior, como interfaces, gestión de recursos, gestión de memoria y concurrencia que afectan a la arquitectura de la aplicación y al 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 directrices se complementan con una justificación y ejemplos, así como discusiones sobre el posible soporte de herramientas. Muchas reglas están diseñadas específicamente para ser verificadas automáticamente por herramientas de análisis estático.

  • los Súper-Preguntas frecuentes de C ++ (Marshall Cline, Bjarne Stroustrup y otros) es un esfuerzo de la Fundación Estándar C ++ para unificar las preguntas frecuentes C ++ previamente mantenidas 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 se escriben con un tono humorístico. No todos los artículos pueden estar 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 cuenta con 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 / Mayores

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

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

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

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

  • Diseño de software de C ++ a gran escala (John Lakos) Lakos explica técnicas para gestionar proyectos de software C ++ muy grandes. Sin duda, una buena lectura, si solo estaba actualizada. Fue escrito mucho antes que C ++ 98 y falla en muchas características (por ejemplo, espacios de nombres) importantes para proyectos a gran escala. Si necesita trabajar en un gran proyecto de software de C ++, es posible que desee leerlo, aunque debe tomar más que un grano de sal con él. El primer volumen de una nueva edición es esperado en 2018.

  • Dentro del modelo de objetos C ++ (Stanley Lippman) Si desea saber cómo se implementan comúnmente las funciones de miembros virtuales y cómo los objetos básicos 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 encontrará discusiones exhaustivas de tales temas.

  • El Manual de referencia anotado de C ++ (Bjarne Stroustrup, Margaret A. Ellis) Este libro está bastante desactualizado por el hecho de que explora la versión de C ++ 2.0 de 1989. Aún no se han introducido plantillas, excepciones, espacios de nombres y nuevos moldes. Sin embargo, al decir esto, este libro pasa por todo el estándar de C ++ del tiempo explicando el fundamento, 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) Dos volúmenes; es un estilo tutorial gratis conjunto de libros de nivel de introducción. Descargas: Volúmen 1, vol 2. Lamentablemente, se ven afectados por una serie de errores triviales (por ejemplo, mantener que los temporales son automáticos). const), sin una lista oficial de erratas. Un parcial 3rd la lista de erratas del partido está disponible en (http://www.computersciencelab.com/Eckel.htm), pero aparentemente no se mantiene.

  • Scientific and Engineering C ++: Introducción a técnicas y ejemplos avanzados (John Barton y Lee Nackman) Es un libro completo y muy detallado que trató de explicar y hacer uso de todas las características disponibles en C ++, en el contexto de los 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 Barton-Nackman). Fue pionero en varias técnicas, como el análisis dimensional y la diferenciación automática. Vino con un montón de código compilable y útil, que abarca desde un analizador de expresiones hasta un envoltorio de 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 un poco obsoletos en el estilo y las características de C ++, sin embargo, fue un tour-de-force increíble en ese momento (1994, antes de STL). Los capítulos sobre herencia dinámica son un poco complicados de comprender y poco ú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 agradable.


4015