C ++ const: почему компилятор не выдает предупреждение / ошибку - PullRequest
4 голосов
/ 11 февраля 2010

Действительно простой вопрос о C ++ constness.

Итак, я читал этот пост , затем я попробовал этот код:

int some_num = 5;
const int* some_num_ptr = &some_num;

Как получается, что компилятор не делаетне выдает ошибку или хотя бы предупреждение?

То, как я читал приведенное выше утверждение, гласит:

Create a pointer that points to a constant integer

Но some_num не является постоянным целым числом - это просто int.

Ответы [ 4 ]

12 голосов
/ 11 февраля 2010

Проблема в том, как вы читаете код. На самом деле должно читаться

Создать указатель на целое число, значение которого нельзя изменить с помощью указателя

A const int* в C ++ не гарантирует, что int является константой. Это просто инструмент, который затрудняет изменение исходного значения с помощью указателя

2 голосов
/ 11 февраля 2010

Ключевое слово const просто говорит компилятору, что вы хотите более строгую проверку вашей переменной. Преобразование неконстантного целого числа в указатель на константное целое является допустимым и просто сообщает компилятору, что оно должно выдать ошибку, если вы попытаетесь изменить значение содержимого константного указателя.

Другими словами, написание

*some_num_ptr = 6;

должно выдавать ошибку, так как указатель указывает на const int.

Запись

some_num = 7;

остается в силе, конечно.

2 голосов
/ 11 февраля 2010

Я согласен с ответом Джареда Пар . Кроме того, ознакомьтесь с C ++ FAQ по правильности констант .

0 голосов
/ 11 февраля 2010

int* ptr; просто говорит, что вы не можете изменить указанное значение на ptr до ptr. Фактическое значение все еще может быть изменено другими способами.

(фактическая причина, по которой компилятор не предупреждает, заключается в том, что приведение от T * к const T * неявно)

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