marzo 2, 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.
(más…)
Filed under:
C++0x by rodrigo
febrero 25, 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.
(más…)
Filed under:
C++0x by rodrigo
febrero 18, 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.
(más…)
Filed under:
C++0x by rodrigo
febrero 15, 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.
(más…)
Filed under:
C++0x by rodrigo
febrero 11, 2010
¿Es posible en C++ declarar una referencia a referencia? Y si se puede, ¿qué significa?
A primera vista parece que no se puede, el siguiente código provoca un error de sintaxis:
(más…)
Filed under:
C++ by rodrigo
febrero 9, 2010
Hay quien considera que las referencias de C++ no son más que punteros constantes, que se des-referencian automáticamente. Según esto estos códigos son prácticamente equivalentes:
Con referencia:
int x = 1;
int &r = x;
r = 2;
std::cout < < r << std::endl;
(más…)
Filed under:
C++ by rodrigo
febrero 8, 2010
error: se requiere un l-valor como operando izquierdo de la asignación
Si has visto alguna vez este error quizás que hayas preguntado qué es exactamente un L-valor y para qué sirve. Es curioso que se puede programar durante muchos años en C++ (o en C, de donde se hereda este concepto) sin tener que preocuparse ni una sola vez por el significado de este mensaje de error. Basta con observar la línea fuente con detenimiento y el error resulta obvio:
(más…)
Filed under:
C++ by rodrigo