Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

кое-что про const - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ exception : 0xC0000005: Access Violation http://www.cyberforum.ru/cpp/thread632008.html
Разработка идет по windows mobile 6. Возникла необходимость в определенном случае менять данные в памяти по адресу 0x02020000 cо смещение 0x4a. Написал в лоб: int offset = 0x4a; int Addr =...
C++ Можно ли написать такую программу Здравствуйте! Мне нужна программа, которая содержала бы в себе всего два поля, при заполнении которых, содержимое этих полей сохранялось в файл на сервере (сайте например). Так же, нужно чтобы... http://www.cyberforum.ru/cpp/thread631692.html
Очень долгое освобождение динамически выделенной памяти C++
Все никак не могу разобраться с одной проблеммой! У меня есть отображение, в котором хранятся указатели на абстрактный класс Node typedef map <int num ,Node*> NodeCont;. //Абстрактный класс...
utf-8 <-> int32 C++
Есть строка s формата utf-8 длины l и число n типа int32 или uint32, которое является уникальным идентификатором строки s. Какие существуют алгоритмы или готовые библиотеки для нахождения s, зная n...
C++ Бесплатные тесты по С++ на Brainbench http://www.cyberforum.ru/cpp/thread623156.html
На http://www.brainbench.com бесплатно доступен тест по С++. Тест не сложный, думаю, многим будет интересно попробовать свои силы и узнать слабые места. Вроде как подобные тесты иногда даже...
C++ [IDA PRO] Интересное выражение Реверсил драйвер. Наткнулся на выражение: v1 = &Irp1->Tail.Overlay.UnkUnion.CurrentStackLocation; *v1 = 12; Собственно как его понимать? Что значит ? (CurrentStackLocation - cтруктура) И... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
09.08.2012, 23:02
Квалификатор const для переменной говорит о том, что в переменную нельзя делать присваивание (assignment). Когда ты пишешь объявление переменной и знак равно с константой, то это уже не присваивание, а инициализация (initialization).

C++
/* Это будет компилироваться, т.к. это инициализация */
const int a = 10;
 
/* А это - не будет, т.к. это присваивание */
const int b;
b = 10;
Логика простая. В const переменную хотя бы один раз на этапе инициализации нужно что-то записать, в противном случае была бы переменная, в которую ничего нельзя записывать, но значение переменной было бы либо ноль, либо не определено.

В какой момент происходит запись значения при инициализации - тоже никакой роли не играет. Важно лишь то, что в момент первого обращения к переменной в неё уже было записано нужное значение. Для глобальных переменных и локальных с модификатором static значение, как правило, записывается на этапе загрузки программы (т.е. до запуска main). Для автоматических переменных - в runtime

Добавлено через 3 минуты
По поводу массива. Есть понятие expression (выражение) и constant expression (константное выражение, значение которого можно посчитать на этапе компиляции). В качестве размерности массива можно указывать только constant expression. Так вот если перменная с квалификатором const инициализирована constant expression'ом, то её можно использовать в других constant expression'ах, в противном случае нельзя

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
и везде вижу что const это константа
В английском языке слово "constant" в первую очередь означает "постоянный", "неизменный". Ну а для русскоязычных людей как-то подсознательно на первый план вылезает "константа" (фиксированная числовая величина)

Добавлено через 5 минут
Да, основную мысль забыл сказать. Логика квалификатора const такова, что в момент рождения переменной она инициализируется некоторым значением, а во время всей своей дальнейшей жизни уже не будет менять своё значение. Вернее не "не будет", а "не должно". А если программист кривыми руками сумеет изменить значение, то он сам себе злобный буратино (то бишь undefined behaviour)
5
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru