Bucle foreach en C++0x

28 de Julio de 2010

A menudo se dice que C++ es un lenguaje complicado, y como ejemplo se cita la iteración sobre los elementos de un contenedor (una lista, por ejemplo): otros lenguajes tienen una sintaxis de tipo for-each, pero en C++ hay que hacer un bucle manual, con iteradores e incremento. Pero ¡ya no más! C++0x incluirá una nueva sintaxis de la sentencia for que será la envidia de los usuarios de otros lenguajes. (more...)

0

Funciones lambda en C++0x

12 de Mayo de 2010

Una de las funcionalidades menos esperadas, pero en mi opinión más bienvenidas, del nuevo estándar de C++ son las funciones Lambda. Originalmente creadas para los lenguajes funcionales, cada vez encuentran más uso en los lenguajes habituales (reconozcámoslo, los lenguajes funcionales no se usan mucho), véanse los delegates en Java y C#, por ejemplo. La inclusión de este concepto en C++, aunque algo limitada en comparación con otros lenguajes de más alto nivel, ofrece muchas posibilidades interesantes. (more...)

7

Templates con número variable de argumentos en C++0x

9 de Marzo de 2010

Allá por el año 1999 se publicaba el nuevo y flamante estándar de C, C99. Una de las muchas de novedades que incluye es la de macros variadic, es decir, con un número variable de argumentos. Sin embargo, siendo programador de C++ me resisto a utilizar macros para cualquier cosas que pueda resolverse con funciones inline y con templates. Esto me deja en una situación de desventaja, pues la única manera que que una función en C++ reciba un número variable de argumentos es con (...) y <stdarg.h> (como la función printf(const char *, ...)), pero es una técnica incómoda y totalmente insegura, no es el estilo de C++. ¡Hasta ahora! Porque C++0x ha conseguido lo que parecía imposible: templates variadic, es decir templates con número variable de argumentos. (more...)

0

Deducción de tipos en C++0x con decltype

1 de Marzo de 2010

El otro día veíamos la deducción automática de tipos usando auto, con la que el tipo de una variable se deduce de la expresión con la que se inicializa. Para todos los demás casos, desde hace ya varios años, muchos compiladores proporcionan alguna forma de deducción de tipos, normalmente algo parecido a __typeof. El comité de C++ consideró seriamente incluirlo en estándar, pero finalmente lo descartaron en favor de una idea nueva: decltype. (more...)

0

Tipos automáticos en C++0x con auto

25 de Febrero de 2010

La palabra reservada auto es casi con toda seguridad la más inútil de todo el lenguaje C (seguida de lejos por register. Tanto es así que mucha gente ni siquiera sabe que existe porque no la ha visto nunca. Una variable local se declara auto para hacerla automática, es decir que se crea en el punto de declaración y se destruye al salir del bloque declarado. Pero una variable local ya es automática por defecto, a no ser que se defina static o extern, por lo que auto no se usa nunca. La nueva versión de C++, C++0x, le da un significado nuevo y totalmente diferente a esta palabra reservada, implementando una de las características más deseadas por los ususarios del lenguaje: la deducción automática de tipos. (more...)

0

La regla de los cuatro miembros y el principio RAII

23 de Febrero de 2010

La regla de los cuatro miembros no se refiere a alguna misteriosa deidad tántrica, sino al hecho de que en C++ , una clase o estructura sin ninguna función miembro declarada expresamente posee cuatro funciones miembro implícitas: el constructor por defecto, el constructor de copia, el operador de asignación y el destructor. Esto es así para mantener la compatibilidad con C (more...)

0

Enumeraciones en C++0x

21 de Febrero de 2010

Una de las críticas habituales de C++ está relacionada con las enumeraciones y se debe principalmente a la herencia de C. Para resolver estas cuestiones, en C++0x se añaden varias nuevas formas de definir enumeraciones. Estos cambios pueden no parecer especialmente significativos, sobre todo comparándolos con otros, pero en mi opinión es importante conocer la nueva sintaxis, aunque solo sea para entender la documentación en la que aparecen. (more...)

0

std::unique_ptr

19 de Febrero de 2010

Si alguna vez has utilizado (o intentado utilizar) la clase std::auto_ptr probablemente habrás notado que es una clase rara. Pero ya no hay que preocuparse por ella porque en C++0x ha sido marcada oficialmente como obsoleta. La funcionalidad que aportaba (o lo intentaba) esta clase la proporciona con ventaja la nueva std::unique_ptr. (more...)

0

Referencias a R-valor (2ª parte)

18 de Febrero de 2010

En el post anterior describía cómo las referencias a R-valor permiten definir un constructor de movimiento y un operador de movimiento. Una clase que implementa ambos se llama clase movible. (more...)

1

Referencias a R-valor (1ª parte)

15 de Febrero de 2010

En un post anterior comentaba que en C++ no se puede vincular una referencia a un objeto temporal. En C++0x existe un nuevo tipo de referencias diseñadas para hacer precisamente esto: las referencias a R-valor. Este cambio, aparentemente sutil, es uno de los más importantes del nuevo estándar, y que condiciona muchos de los añadidos adicionales. Por eso es importante comprenderlas bien. (more...)

0