В чем разница между макросом и константой в C ++?

Мне задали этот вопрос в техническом интервью:

В чем разница между const и макрос в C ++?

Я ответил, что макрос является директивой препроцессора и может быть трудно отладить приложение, если вы используете макрос, поскольку он заменяется константным выражением перед компиляцией, тогда как const может иметь идентификатор типа и его легко отлаживать.

Может ли кто-нибудь указать на какие-либо другие отличия и какие из них следует предпочесть?

РЕДАКТИРОВАТЬ:

Из документации IBM для C ++:

Ниже приведены некоторые различия между #define и квалификатором типа const :

  1. Директива #define может использоваться для создания имени для числа, символа или строки константа, в то время как константный объект любого типа может быть объявлен.

  2. Константный объект подчиняется области действия ng правил для переменных, а константа, созданная с помощью #define , - нет. В отличие от объекта const , значение макроса не появляется в промежуточном исходном коде, используемом компилятором, потому что они раскрываются в строке. Встроенное расширение делает значение макроса недоступным для отладчика.

  3. Макрос можно использовать в константном выражении, таком как привязка массива, тогда как объект const не может. (Я думаю, что нам обязательно нужно использовать макрос для определения array_size .

  4. Компилятор не проверяет тип макроса, включая аргументы макроса.

20
задан Jamal 5 May 2014 в 23:46
поделиться