2010-05-12 4 views
9

Je me demande si quelqu'un peut expliquer à me suivre: Si j'écrisAffectation d'une variable de pointeur à un const int en C++?

int i = 0; 
float* pf = i; 

je reçois une erreur de compilation (gcc 4.2.1):

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

sens Makes - ils sont évidemment deux types complètement différents. Mais si au lieu que j'écris

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

Il compile sans erreur. Pourquoi le «const» devrait-il faire la différence du côté droit de la mission? Ne fait-il pas partie de l'idée du mot clé 'const' pour pouvoir appliquer des contraintes de type pour des valeurs constantes? Toute explication que j'ai pu trouver se sent genre de faux. Et aucune de mes explications n'explique aussi le fait que

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

ne parvient pas à compiler. Quelqu'un peut-il offrir une explication?

Répondre

10

Votre deuxième exemple se produit simplement à être couverts par les règles de conversion tel que spécifié dans §4.10/1 (03 C++):

Une constante de pointeur null est une expression constante intégrale (5,19) rvalue de type entier qui évalue à zéro. Une constante de pointeur NULL peut être convertie en un type de pointeur; le résultat est la valeur du pointeur NULL de ce type et se distingue de toutes les autres valeurs de pointeur sur objet ou de pointeur sur type de fonction.

Questions connexes