Присвоение переменной указателя к интервалу константы в C++?

Я задаюсь вопросом, может ли кто-либо объяснить следующее мне: Если я пишу

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;

сбои для компиляции. Кто-либо может предложить объяснение?

9
задан John 12 May 2010 в 23:54
поделиться

1 ответ

Ваш второй пример просто попадает под правила преобразования, указанные в §4.10 / 1 (C ++ 03):

Константа с нулевым указателем - это целочисленное постоянное выражение (5.19) rvalue целочисленного типа, значение которого равно нулю. Константа нулевого указателя может быть преобразована в тип указателя; результатом является значение нулевого указателя этого типа, которое можно отличить от любого другого значения указателя на объект или указателя на тип функции.

10
ответ дан 4 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: