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

2008-12-23 c++ c++-faq

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 pueden 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 preguntas frecuentes.

Answers

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]

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

  • 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.

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 ++ 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 provenientes de C, la tercera edición cambia esto y apunta a programadores que provienen 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 realizan la transición de C ++ 03 a C ++ 11 y C ++ 14.

  • Effective STL (Scott Meyers) Esto tiene como objetivo hacer lo mismo con la parte de la biblioteca estándar que proviene del 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 que incluyen el lenguaje 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 del 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, modismos 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 muchas trampas comunes. Tiene excelentes resúmenes de la regla de definición única (ODR) y la resolución de sobrecarga en los apéndices. Ya se ha publicado una 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 cubre todo, desde las simples como 'Variables en línea', 'constexpr si' hasta 'Polimórfico Recursos de memoria 'y' Nuevo y eliminar con datos sobrealineados '.

  • C ++ en acción (Bartosz Milewski). Este libro explica C ++ y sus características creando una aplicación desde cero. [Revisión]

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


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 fundamentales de programación genérica, luego explica cuántos patrones de diseño útiles (incluidos 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 de C ++, bloqueos y mutexes, así como temas de diseño y depuración de aplicaciones multiproceso. Ya se ha publicado una 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.


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 ?

  • Tutorial y referencia de la biblioteca estándar de C ++ (Nicolai Josuttis) ( actualizado para C ++ 11 ) La introducción y referencia de la biblioteca estándar de C ++. 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 Standard C ++ Foundation 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 artículos 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á 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.

  • El 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 elencos. Dicho esto, sin embargo, este libro pasa por todo el estándar de 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 un conjunto gratuito de estilo tutorial 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 automáticamente), sin una lista oficial de erratas. Un lista de erratas partido parcial está disponible en ( http://www.computersciencelab.com/Eckel.htm ), pero al parecer no ha mantenido.

  • Ciencia e ingeniería 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. Introdujo en su 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. 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.

Related