C++. Разница меджу #define и const ?
У них вообще нет ничего общего.
#define – это директива препроцессора, определяющая идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в тексте программы.
const – ключевое слово, которое указывает на то, что объект или переменная не являются изменяемыми.
constexpr – спецификатор, с помощью которого можно создавать переменные, функции и объекты, которые будут рассчитаны на этапе компиляции.
#define
распространяется на весь код целиком, даже на дополнительно включенные файлы, что может повлечь за собой ошибки. Это что-то типа глобальной переменной. Второе это неопределенный тип данных. Плюс в том что подстановка происходит на стадии компиляции.
const
это константная переменная и соответственно к ней применимы правила константной переменной. То есть область видимости и время жизни переменных. Плюс известен тип данных. Минус вместо подстановки значения, как в случае с #define, идет обращение к памяти, где лежит сама переменная. Лишнее обращение к памяти, хоть чуть чуть, но все же делает приложение медленней.
Есть еще constexpr
Она делает константные переменные, но, если такое возможно, подстановку делает на стадии компиляции, так же как #define. Плюсы применимы правила константной переменной и к этому же добавляется возможность подставлять напрямую значение, как в случае с #define.
defne делает замену на этапе компиляции. const же сохраняет значения непосредственно в исполняемом модуле и хранит их в памяти, имея реальный адрес хранения, общий для всех подпрограмм и библиотек.
#define - имеет побочные эффекты
const - позволяет писать более надежный код, указывая компилятору на ограничения, которые он должен проверять.
define как правило используют в библиотеках (например WM_DESTROY это
#define WM_DESTROY 0x002, из winuser.h
).
const надо использовать в своём коде, в файле в котором ты будешь создавать условия с ним (например const HEIGHT=8, WIDTH=8, это допустим для шахмат карта)