В чем различие между этими определениями переменной: #define N 100 и const int n = 100 Что из этих двух является более предпочтительным и в чем достоинства каждого?
Ответ Это очень дискуссионный вопрос у всех. Но в целом, в C++ лучше использовать const везде, где это возможно. Плюсы: на них действуют области видимости. компилятор относится к ним как к обычными переменным, доступным только на чтение. у них есть тип. У #define это все - недостатки. Они действуют от места определения и до ... конца. Хотя, где этот конец будет - ещё нужно хорошо подумать. Они могут переопределять друг дружку и иногда искать, где именно было в очередной раз переопределено - ещё то удовольствие. Компилятор часто выдает очень "загадочные ошибки". Классический пример с макросом min/max. Файл определяет их. И может быть очень весело. Детали - NOMINMAX. Ещё у #define есть большой недостаток - это то, что некоторые думают, что там есть скобки. А их нет. #define add(a,b) a+b if (add(x,y) * add(x,y)) {} кажется, что будет посчитано (x+y) в квадрате. А на самом деле - .... на самом деле x+y + x*y. Но мы немного отвлеклись. Такого сделать обычным const уже нельзя. Но легко сделать inline функциями. И их результат будет предсказуемый. Поэтому: eсли нужно просто определить константу - используйте const (даже само слово намекает). eсли нужно определить макрос - используйте функции (если хочется интересней - используйте inline, но компиляторы сейчас достаточно умные). если нужно усложнить код и добавить синтаскического сахара - тогда самое время использовать #define. UPD А ещё хорошо найти книгу Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ - Скотт Майерс и почитать второй совет (в любом случае - там всю книгу можно читать и читать).