2010-12-07 37 views
16

Aprendí C++ por primera vez hace años leyendo "The C++ Programming Language" de Stroustrup dos veces y participando durante un año en un proyecto bastante grande (aunque el nivel del equipo de C++ era bastante bajo). El C++ del libro del Fundador era realmente una gran extensión del antiguo C. potente y orientado a objetos e incluso genérico, pero aún - extensión. Y, sí, había como STL de alguna manera agregado al idioma por estándar, que estaba allí por algunas razones ocultas, ya sea que lo vayas a usar o no. Entonces, en esos días no obtuve una buena impresión de C++: además de todos estos eternos problemas de C con memoria, punteros y matrices de matrices, se añadieron muchas cosas nuevas: con clases y plantillas y una sintaxis complicada y mucho de pensar para resolverlo.C++ como lenguaje de alto nivel?

Ahora, después de años de mantenerme alejado de C++, comencé recientemente a actualizar mi conocimiento, pero ahora supe con "Accelerated C++" de Andrew Koenig y Barbara E. Moo. ¡Y lo que estoy viendo allí es absolutamente "otro C++"! Siguiendo este libro, de hecho puedes usar C++ casi sin conocer su C-core: nunca puedes usar matrices, ya que tienes vectores, puedes olvidarte de char *, ya que tienes cadena, etc., etc. Desde este punto de Ver, STL es realmente el corazón del lenguaje y el lenguaje en sí mismo parece ser de muy alto nivel, pero con rendimiento y control sobre entidades que ni Java ni Python podrían permitirse.

Entonces, ¿qué C++ usas en tu práctica? ¿Mezclas los estilos, por ejemplo, arrays y vectores? ¿Hay alguna regla o mejores prácticas aquí ...

ACTUALIZACIÓN:?

me dijeron en los comentarios que lo que estoy hablando es lo que ahora se llama "Modern C++". Búsqueda por estas palabras pone de manifiesto los siguientes temas realmente interesantes:

Is modern C++ becoming more prevalent?

What is Modern C++?

Examples of "modern C++" in action?

+1

Debería ser wiki de la comunidad. – ybungalobill

+3

@ybungalobill: [Los no moderadores ya no pueden hacer preguntas a CW]. (Http://meta.stackexchange.com/questions/392/should-the-community-wiki-police-be-shut-down/7183#7183) –

Respuesta

3

Entonces, ¿qué C++ usas en tu práctica? ¿Mezclas los estilos, por ejemplo, arrays y vectores? ¿Hay alguna regla o mejores prácticas aquí? ...

Modern C++, definitely. Pero en mi opinión, eso no es exactamente descartar matrices. Todavía hay casos en que las matrices son preferibles a los vectores. Pero cuando uso matrices, las uso de una manera similar a STL. Uso punteros como iteradores, y aplico algoritmos STL a los contenidos de la matriz, y así sucesivamente.

Por cierto, el propio Bjarne Stroustrup ha sido citado para la descripción de C++ de una manera muy similar a lo que se describe a sí mismo:

Dentro de C++, hay un lenguaje mucho más pequeño y más limpio que luchan para salir

Por supuesto, existen limitaciones. Con C++ moderno, los tiempos de compilación tienden a sufrir. Y requiere compiladores mucho más avanzados, lo que en algunas plataformas lo convierte en un no-go. Y muchos desarrolladores líderes o gerentes de proyectos más conservadores, o simplemente bases de códigos antiguas a veces significan que tampoco es una opción. Y hay una cierta curva de aprendizaje, porque todas las trampas de C siguen ahí, solo tienes que aprender a evitarlas (por ejemplo, las pérdidas de memoria no solo desaparecen , sino que C++ moderno solo define algunos patrones muy potentes para Evítales).

Pero creo que el C++ moderno realmente se puede considerar un lenguaje hermoso. Y definitivamente no es así como describirías el estilo tradicional de "C-con-clases" C++.

Cuando trabajo en (otros) idiomas de alto nivel, he encontrado que casi siempre hay algo que extraño de C++. O el lenguaje falla en los contenedores robustos y seguros de tipo o los iteradores/algoritmos expresivos, o carece de soporte para RAII, o no tiene forma de expresar algoritmos genéricos, como se puede hacer con las plantillas.

Esos lenguajes definitivamente también tienen sus ventajas, y hay áreas indiscutiblemente donde simplemente son mejores que C++. Pero generalmente también encuentro que tienen defectos claros, donde solo no puedo expresar mis ideas tan bien como puedo en C++. Tengo que saltar a través de los aros, sacrificar la seguridad del tipo, confiar en la reflexión o cualquier otra cosa, solo para hacer algo que C++ hubiera soportado "naturalmente".

+0

+1 por "Simplemente no puedo expresar mis ideas lo mejor que puedo en C++". Estoy completamente de acuerdo. –

3

tipificación genérica y la plantilla metaprogramming todo el camino. No uso mucho el polimorfismo ya que es demasiado lock-in.

Y, por cierto, las bibliotecas de Boost son un gran complemento para STL.

3

Koenig and Moo's Accelerated C++ es un libro muy bueno, y uno que recomiendo.

Yo mezclo matrices y vectores como mejor le parezca. Para las cosas que no se cambian dinámicamente, todavía uso matrices, de lo contrario usaría vectores.

Es importante que entienda ambos.

+1

Utilice 'boost :: array' o' std :: array' para matrices estáticas – Inverse

-7

Como una respuesta alternativa, estoy tentado de decir que la mejor práctica para usar C++ es no hacerlo.

Si solo tiene Windows, y .Net no es demasiado grande, entonces C# es una excelente opción. En Unix, Java es genial.

Por supuesto C++ tiene su lugar. Es solo un lugar más pequeño de lo que solía ser en mi mundo.

Editar: Tengo más de treinta años de experiencia en programación. Asamblea de 5 años, 17 años en C, 5 años en C++, 3 años en Java y ahora 2 años en C#. Soy muy bueno en todo esto. Assembler is es genial. Soy rápido en la programación con él. Pero prefiero C sobre ensamblador. Del mismo modo, prefiero C# sobre C++.Me resulta mucho más fácil hacer las aplicaciones más comunes en C# que en C++

+1

-1, no tengo problemas para usar C++ para el desarrollo de Windows. –

+1

Sí, uso C++ también. Tiene su lugar. Ya dije eso. –

+10

Entonces tu mundo debe ser bastante pequeño. –

6

Enhorabuena, ha descubierto lo que llamamos "C++ moderno". Lo preferiría algún día sobre los estilos de programación de "C con clases". No más punteros crudos, eliminaciones más explícitas, etc. ¡Maravilloso mundo!

+0

Eso es agradable de escuchar :) ¿Qué más se puede leer sobre "Modern C++"? – izhak

+2

y no más funciones de estilo '# define'! – tenfour

0

Definitivamente de estilo mixto. Parece tonto limitarse innecesariamente, especialmente con tantas opciones.

3

Uso programación genérica y RAII siempre que sea posible. Los extraño a ambos en lenguajes "modernos" que no son C++.

Cuestiones relacionadas