¿Sigue siendo efectivo C ++?

139

Por lo que vi en esta publicación , decidí comenzar a leer el libro Effective C ++ .

Pero ahora que hay muchas características nuevas debido a C ++ 11 y que algunas de las buenas prácticas cambiaron, no estoy seguro de si realmente es una buena idea. ¿El advenimiento de C ++ 11 ha desaprobado alguno de los consejos contenidos en Effective C ++? Si es así, ¿qué temas debo evitar?

Capuano Alemán
fuente
44
El autor hizo algunos comentarios en un artículo scottmeyers.blogspot.co.uk/2013/01/… y otros en el sitio, básicamente sí, pero hay más para considerar.
jcoder
2
Solo eche un vistazo a la tabla de contenido: pearson.ch/1471/9780321334879/… . Muchos elementos siguen siendo válidos, algunos pueden mejorarse con referencias de valor r y otras cosas nuevas, pero en general debería ser efectivo.
Zeta
Esta pregunta es un mal ajuste para SO. (1) El contenido sobre el que se preguntó no está en la pregunta, está en un recurso fuera del sitio (y ni siquiera está vinculado). (2) O bien abordar cada recomendación en el libro es una respuesta separada, en cuyo caso esta es una pregunta de lista, que requiere demasiadas respuestas, o bien una sola respuesta debería discutir todo el libro, en cuyo caso esta pregunta es demasiado amplia. Dicho esto, hacer una pregunta idéntica sobre cualquier recomendación individual sería genial.
Ben Voigt
2
(1) Estoy haciendo referencia a un libro mencionado en una de las preguntas más populares de SO. (2) Esa es una queja aceptable, pero puede ser amplio con casi cualquier pregunta. o puedes ser tan estrecho como quieras. Creo que las respuestas fueron bastante buenas y mucho más limitadas que la mayoría de las preguntas en SO, por lo que no creo que sea necesaria una lista detallada. FUERA DEL TEMA: adivina quién tiene una pregunta que comienza con "¿Alguien puede superar el rendimiento de mi entero a std :: código de cadena, vinculado a continuación?"
Capuano alemán

Respuestas:

93

Esto es lo que el propio Scott Meyers tenía que decir al respecto en su propio blog.

Lo que puede llevarlo a preguntarse si la información y los consejos en esta edición anterior a C ++ 0x de Effective C ++ siguen siendo relevantes. Me complace informar que sí. Sorprendentemente, de hecho. Después de pasar casi dos años inmerso en los detalles de C ++ 0x, esperaba gemir un poco al revisar la tabla de contenido de este libro con C ++ 0x en mente. Seguramente algunos artículos serían inapropiados. Pero el consejo que encontré resultó sólido. ¿Deberían los desarrolladores de C ++ 0x preferir consts, enumeraciones e inlines a #defines(Artículo 2)? Ellos deberían. ¿Deben evitar que las excepciones dejen destructores (Artículo 8)? Ciertamente. ¿Deberían usar objetos para administrar recursos? ¿Declarar que los miembros de datos son privados? ¿Considerar alternativas a las funciones virtuales? ¿Factorizar código independiente de parámetros a partir de plantillas? (Artículos 13, 22, 35 y 44.) ¡Sí, sí, sí, sí! Mi objetivo siempre ha sido que la tabla de contenido de Effective C ++ resuma los consejos del libro, y ese resumen sigue siendo tan aplicable al desarrollo de C ++ 0x como al desarrollo de C ++ "tradicional". C ++ 0x es un lenguaje más grande, y de alguna manera es diferente, pero las técnicas básicas para hacer un uso efectivo de C ++ "antiguo" son también centrales para el uso efectivo de C ++ 0x.

Esto no significa que este eficaz C ++ sea una combinación perfecta para C ++ 0x. El libro no trata las características nuevas de C ++ 0x, por lo que faltan elementos sobre el uso efectivo de esas características. Un C ++ efectivo C ++ 0xified ciertamente tendría elementos dedicados a operaciones de movimiento, inicialización uniforme y expresiones lambda, y probablemente tendría un capítulo completo sobre el uso eficaz de la API de concurrencia. Dicho libro también contendría diferentes ejemplos, por ejemplo, los que utilizan variables automáticas, basados ​​en rangos para bucles, inicializadores predeterminados en clase, así como la plantilla variable ocasional. En la medida en que este libro no sea compatible con C ++ 0x, los errores son de omisión, no de comisión.

ACTUALIZACIÓN : el nuevo título Effective Modern C ++ ha estado a la venta desde noviembre de 2014 de O'Reilly y Amazon (y muchos otros que puede buscar en Google).

TemplateRex
fuente
45

Sí, definitivamente aún vale la pena leerlo. Hay un nuevo libro en el que Scott está trabajando: Efectivo C ++ 11 , que se concentra en el código de C ++ 11 solamente. El C ++ efectivo sigue siendo muy relevante, y no es reemplazado por el nuevo libro. Cómpralo, léelo, disfruta :)

cdmh
fuente
1
Veo los libros construirse uno sobre el otro, por lo que Effective C ++ es la base vital. Si solo lee uno de los dos, debería ser Efectivo C ++. Efectivo Modern C ++ es mucho más esotérico (y para ser sincero, la mayoría de C ++ está lejos de ser "moderno" de todos modos).
Andy Krouwel el
21

Uno, el libro sigue siendo válido para C ++ 03.

Dos, Meyers está escribiendo o ha escrito, dependiendo de cuándo esté leyendo esta oración, Efectivo C ++ 11.

Tres, hablando en general, los puntos de este libro seguirán siendo válidos. C ++ todavía favorece la velocidad sobre la seguridad, y muchos problemas en Effective C ++ giran en torno a esto.

El único tipo de punto que esperaría ser inválido son los que dicen "No hagas esto, haz esto en su lugar". "No hagas esto" seguirá siendo válido. Pero C ++ habrá resuelto algunos problemas. En particular, cualquier recomendación para usar boost probablemente haya quedado en desuso, ya que C ++ 11 ha incluido muchas de las características que Meyers refiere específicamente al lector para Boost.

djechlin
fuente
1
Y, por supuesto tr1, dado que creo que cada elemento tr1que mencionó se convirtió en el estándar C ++ 11.
Kyle Strand