2013-05-01 2 views

ответ

1

Вы не можете изменить a, если объявили его как const.

const int a = 5; 
a = 6; 

Не компилируется (выражение должно быть модифицируемым значением lvalue).

+1

Не совсем верно. Вы можете изменить его косвенно через указатель таким образом, чтобы компилятор не поймал. –

2
const int a = 4; 

Является переменной, которую компилятор не позволит вам изменить.

Статический определитель изменяет способ поведения переменной. В частности, это означает, что переменная «распределена», когда программа запускает выполнение и освобождается только после завершения программы. В частности, статические переменные класса сохраняют свое состояние независимо от экземпляров объектов. Статические переменные в функциях сохраняют свое состояние между вызовами функций. Статические классификаторы глобальных констант в этом случае избыточны и используются только для определения внутренней/внешней связи.

+3

Что такое «переменные класса»? (Вопрос отмечен c, а не C++.) –

+1

В C статические классификаторы для глобальных констант также не являются избыточными. –

+0

Я бы хотел увидеть главу и стих о «глобальных константах» в C. –

4

При определении a с const int a = 4;, вы не должны изменения a, но компилятор не требуется, чтобы помешать вам сделать это. Компилятор должен подготовить диагностическое сообщение, если вы попытаетесь напрямую изменить a, как и с a = 5;, но есть и другие способы, с помощью которых можно было бы изменить a, что компилятор не обязательно поймает, например * (int *) &a = 5;. Если вы это сделаете, стандарт C не определяет результирующее поведение. Добавление static к определению не изменит этого.

+0

Хорошо отмечая, что он не гарантируется. это не вкладка защиты от записи в переменной, как вы могли бы пожелать иначе. –

Смежные вопросы