Вероятно, справа - ты
Оракул
(69119)
14 лет назад
const типКонстанты ИМЯКОНСТАНТЫ значение
К примеру, если создать строковую константу
const string HELLO "Привет";
или так
#define HELLO "Привет";
именем константы можно пользоваться в коде вместо строки "Привет".
Но следует помнить, что первый способ даёт возможность проверки типа, и константу HELLO можно будет использовать только там, где можно использовать обычные строки. Однако второй способ не имеет подобных ограничений, и это может привести к странным результатам:
int x = HELLO
Для константы, определённой посредством сonst, возникнет ошибка в процессе компиляции, но это не произойдёт для #define
И это не даст возможности компилятору самому найти эту ошибку, в этом преимущество у директивы const.
Источник: Хенкеманс, Ли, Программирование на cpp, стр 54, Применение констант
matod
Искусственный Интеллект
(192908)
14 лет назад
Строго говоря, с помощью директивы вы не можете объявить константу. define определяет макроподстановку (макрозамену) . И имя, используемое в этой команде называется именем макроса.
Константу определяют с помощью ключевого слова const.
Разница между макро и константой очень существенная. Объявление константы - это по сути предписание компилятору создать ячейку памяти, как для переменной, поместить туда заданое значение и проконтролировать, что нигде в программе нет когда, который это значение пытается изменить.
Макроподстановка - это просто сокращенное обозначение некоего набора символов. Компилятор выполнит замену имени на эту последовательность до процесса преобразования исходного текста в объектный код. Поскольку никакой типизации макросов нет по определению, нет и никакого (ну, почти никакого) контроля, что может привести ко всяким неприятностям.
Бездумное использование макро может привести к нерациональному использованию памяти, трудно воспринимаемому коду и "хитрым" ошибкам, выявление которых требует неоправдано много времени.