Я задаюсь вопросом, может ли кто-либо объяснить следующее мне: Если я пишу
int i = 0;
float* pf = i;
Я получаю ошибку компиляции (gcc 4.2.1):
error: invalid conversion from ‘int’ to ‘float*’
Имеет смысл - они - очевидно, два совершенно других типа. Но если вместо этого я пишу
const int i = 0;
float* pf = i;
Это компилирует без ошибки. Почему 'константа' должна иметь значение на правой стороне присвоения? Разве часть идеи ключевого слова 'константы' не, чтобы смочь осуществить ограничения типа для постоянных величин?
Любое объяснение я смог придумать довольно поддельные чувства. И ни одно из моих объяснений также не объясняет факт это
const int i = 1;
float* pf = i;
сбои для компиляции. Кто-либо может предложить объяснение?
Ваш второй пример просто попадает под правила преобразования, указанные в §4.10 / 1 (C ++ 03):
Константа с нулевым указателем - это целочисленное постоянное выражение (5.19) rvalue целочисленного типа, значение которого равно нулю. Константа нулевого указателя может быть преобразована в тип указателя; результатом является значение нулевого указателя этого типа, которое можно отличить от любого другого значения указателя на объект или указателя на тип функции.