Мне задали этот вопрос в техническом интервью:
В чем разница между
const
и макросом в С++?
Мой ответ заключался в том, что макрос является директиву препроцессора, и может быть сложно отладить приложение, если вы используете макрос, поскольку он заменяется константным выражением перед компиляцией, тогда как const
может иметь идентификатор типа и легко отлаживается.
Может ли кто-нибудь указать на какие-либо другие отличия и что должно быть предпочтительным?
EDIT:
Из документации IBM для С++:
Ниже перечислены некоторые различия между
#define
и классификатором типаconst
:
Директива
#define
может использоваться для создания имени для числовой, символьной или строковой константы, тогда как объект const любого типа может быть объявлен.Объект const подчиняется правилам определения переменных, тогда как константа, созданная с помощью
#define
, не является. В отличие от объектаconst
значение макроса не отображается в промежуточном исходном коде, используемом компилятором, потому что они расширены внутри строки. Встроенное расширение делает макрос недоступным для отладчика.Макрос может использоваться в постоянном выражении, таком как связанный массив, тогда как объект
const
не может. (Я думаю, что нам обязательно нужно использовать макрос для определенияarray_size
.Компилятор не проверяет тип макроса, включая аргументы макроса.