Как я кодирования, я объявлял следующее:декларирование переменных классов хранения
const int a = 4;
«А» переменной, что компилятор не позволит мне изменить? или мне понадобится статическая константа int a = 4?
Спасибо!
Как я кодирования, я объявлял следующее:декларирование переменных классов хранения
const int a = 4;
«А» переменной, что компилятор не позволит мне изменить? или мне понадобится статическая константа int a = 4?
Спасибо!
Вы не можете изменить a, если объявили его как const.
const int a = 5;
a = 6;
Не компилируется (выражение должно быть модифицируемым значением lvalue).
const int a = 4;
Является переменной, которую компилятор не позволит вам изменить.
Статический определитель изменяет способ поведения переменной. В частности, это означает, что переменная «распределена», когда программа запускает выполнение и освобождается только после завершения программы. В частности, статические переменные класса сохраняют свое состояние независимо от экземпляров объектов. Статические переменные в функциях сохраняют свое состояние между вызовами функций. Статические классификаторы глобальных констант в этом случае избыточны и используются только для определения внутренней/внешней связи.
Что такое «переменные класса»? (Вопрос отмечен c, а не C++.) –
В C статические классификаторы для глобальных констант также не являются избыточными. –
Я бы хотел увидеть главу и стих о «глобальных константах» в C. –
При определении a
с const int a = 4;
, вы не должны изменения a
, но компилятор не требуется, чтобы помешать вам сделать это. Компилятор должен подготовить диагностическое сообщение, если вы попытаетесь напрямую изменить a
, как и с a = 5;
, но есть и другие способы, с помощью которых можно было бы изменить a
, что компилятор не обязательно поймает, например * (int *) &a = 5;
. Если вы это сделаете, стандарт C не определяет результирующее поведение. Добавление static
к определению не изменит этого.
Хорошо отмечая, что он не гарантируется. это не вкладка защиты от записи в переменной, как вы могли бы пожелать иначе. –
Не совсем верно. Вы можете изменить его косвенно через указатель таким образом, чтобы компилятор не поймал. –