programas - programa en c++
¿Cuál es tu característica favorita de C++ 0x? (23)
Como muchos de nosotros sabemos (y muchos, muchos otros no), C ++ está actualmente en proceso de redacción final para la próxima revisión del Estándar Internacional, que se espera que se publique en aproximadamente 2 años. Borradores y documentos están actualmente disponibles en el sitio web del comité . Se están agregando todo tipo de características nuevas, las más importantes son los conceptos y las lambdas. Hay un artículo de Wikipedia muy completo con muchas de las nuevas características. GCC 4.3 y posteriores implementan algunas características de C ++ 0x .
En cuanto a las nuevas características, realmente me gustan los rasgos de tipo (y los conceptos apropiados), pero mi líder definitivo son las plantillas variadas. Hasta 0x, las listas de plantillas largas han involucrado al Preprocesador Boost generalmente, y son muy desagradables de escribir. Esto hace las cosas mucho más fáciles y permite que las plantillas C ++ 0x sean tratadas como un lenguaje perfectamente funcional usando plantillas variadic. ¡Ya he escrito algunos códigos geniales con ellos, y estoy ansioso por usarlos con más frecuencia!
Entonces, ¿qué características estás anticipando con más impaciencia?
Tiene que ser la incorporación de algunas de las bibliotecas de Boost (shared_ptr <> y enlazar a la parte superior de la lista)
El control sobre la instalación de la plantilla finalmente debería resolver el problema de los enormes tiempos de compilación y hacer factible el uso de un código de plantilla moderno en proyectos grandes.
Plantilla typedefs
Muchas otras cosas pequeñas pero importantes, pero sí importan en el código de producción.
Cierres para mi
Hilos y atómicos.
Con los procesadores multinúcleo, ahora la norma C ++ 0x debería haber sido C ++ 07.
GRAMO.
La sintaxis de iteración for (auto x : collection)
es muy buena, creo ... reduce literalmente el tamaño de muchos encabezados de bucle por un factor de 4 o más (¡los tipos de iteradores a menudo son ... prolijo)!
También significa que no tiene que desreferenciar el iterador en el cuerpo del bucle (con un bucle de iterador tradicional, siempre debe usar *i
o i->...
para obtener el valor del elemento, pero aquí puede usar x
), lo que en algunos casos hace que el código se vea mucho mejor.
La sintaxis va de mal en peor.
Las plantillas variables y las lambdas son agradables, aunque la sintaxis de ambas es desagradable.
Lambdas y listas de inicializadores.
Además, los cambios para que sea más fácil llevar eventualmente C ++ a un modelo de recolección de basura, parecen bastante interesantes. Quizás C ++ 1x realmente traerá la recolección de basura, pero 0x / 10 simplemente configura las cosas para la eventualidad.
Manos abajo conceptos para mí. Pero las listas de inicializadores, lambdas y plantillas variadas son un segundo cercano.
Me gusta el constexpr
especialmente en combinación con plantillas variadas y literales definidos por el usuario. Finalmente podemos tener literales binarios y muchos otros objetos.
obj.bitmask |= 00001010B;
No es grande, pero me encanta la idea de un verdadero nullptr . Debería haber sido una palabra clave desde el git-go.
No puedo decidir entre Null Pointer Type , Tuple Types o Regex . ''Foreach'' está allí también. ''Smart Pointers'' es evidente ... :-)
Básicamente, estoy ansioso por la actualización.
Personalmente creo que el uso intensivo del tipo de puntero nulo atrapará muchos errores. Las tuplas son geniales para tratar con datos relacionales. Muchas cosas geniales
Plantillas variables! (¡Lo cual combinado con referencias de valor r nos da un reenvío perfecto!)
Punteros inteligentes. Realmente hace una gran diferencia no tener que administrar memoria explícitamente los objetos asignados en el montón.
Obviamente todavía necesita "saber lo que está haciendo", pero en mi experiencia ha disminuido la cantidad de errores relacionados con la memoria al menos un orden de magnitud en el software con el que he trabajado.
Quiero referencias de Rvalues.
Todas las otras características nuevas son cosas que podríamos vivir fácilmente sin (funciones de alas). Sin embargo, la falta de valores R en C ++ hasta el momento ha provocado que cientos de autores de bibliotecas de plantillas tengan que "piratear" el problema de referencia de Rvalue roto.
REGEX !! y las bibliotecas de programación paralela, aunque todavía no conozco las características de todas ellas.
Unicode, multihilo, hash_tables, punteros inteligentes y expresiones regulares.
ps: Me pregunto por qué simplemente no pueden hacer una revisión del código gr8 y aceptan todas las versiones de refuerzo y tr1 en los estándares y hacen la vida más fácil para todos. Todo lo que tendrían que resolver es acordar un modelo opcional de recolección de basura.
palabra clave automática para la inferencia de tipo variable
palabra clave auto
por el momento me gustó mucho C ++ 0x con el que jugué:
- nullptr
- static_assert
- lambdas
- shared_ptr y weak_ptr
- unique_ptr
- decltype y auto
No lo he intentado <regexp>
... Pensé que era una gran idea ... pero ni siquiera me tomé el tiempo de mirarlo.
Enumeraciones fuertemente tipadas obtienen mi voto. Pascal solo ha tenido estos por alrededor de 40 años, así que es bueno ver que C ++ finalmente se pone al día.
Sin embargo, la publicación de la norma es realmente un no evento. Lo que es mucho más importante es cuando las características que desea utilizar son realmente compatibles con las cadenas de herramientas del mundo real. Hay personas que parecen disfrutar de escribir código que cumple con los estándares y que no puede compilarse en ningún compilador conocido. Buena suerte para ellos.
¡Literales de cadena sin procesar ! Pensé que los bloques de cuerdas parecidos a pitones eran increíbles, ¡pero estaba equivocado! En C ++ 0x, los literales de cadena sin procesar son increíblemente útiles para el formateo de texto. Los lenguajes de marcado se pueden escribir directamente en su fuente.
Lambdas y Conceptos
Soporte angular en declaraciones de plantillas anidadas.
Entonces podré escribir
std::vector<std::vector<int>> a;
en lugar de lo horrible
std::vector<std::vector<int> > a;