2010-05-12 9 views
9

Me pregunto si alguien puede explicar lo siguiente para mí: Si escribo¿Asignar una variable de puntero a una const int en C++?

int i = 0; 
float* pf = i; 

me sale un error de compilación (gcc 4.2.1):

error: invalid conversion from ‘int’ to ‘float*’ 

Tiene sentido - que son, obviamente, dos tipos completamente diferentes. Pero si en cambio escribo

const int i = 0; 
float* pf = i; 

Se compila sin error. ¿Por qué debería el 'const' hacer una diferencia en el lado derecho de la tarea? ¿No es parte de la idea de la palabra clave 'const' poder aplicar restricciones de tipo para valores constantes?

Cualquier explicación que he podido encontrar me parece un poco falsa. Y ninguna de mis explicaciones también explica el hecho de que

const int i = 1; 
float* pf = i; 

no se compila. ¿Alguien puede ofrecer una explicación?

Respuesta

10

Su segundo ejemplo simplemente pasa a ser cubiertos por las reglas de conversión como se especifica en §4.10/1 (C++ 03):

Una constante puntero nulo es una expresión constante integral (5.19) rvalue de tipo entero que se evalúa a cero. Una constante de puntero nulo se puede convertir a un tipo de puntero; el resultado es el valor de puntero nulo de ese tipo y se puede distinguir de cualquier otro valor de puntero a objeto o puntero a tipo de función.

Cuestiones relacionadas