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