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