Назначение переменной указателя для const int в C ++? - PullRequest
9 голосов
/ 13 мая 2010

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

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» должен иметь значение в правой части задания? Не является ли частью идеи ключевое слово «const», чтобы можно было применять ограничения типа для постоянных значений?

Любое объяснение, которое я смог придумать, кажется фальшивым. И ни одно из моих объяснений также не объясняет тот факт, что

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

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

1 Ответ

10 голосов
/ 13 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...