На данный вопрос уже ответили: Различие define и const 2 ответа В чем в C++ разница между #define и const? То есть какой из вариантов предпочтительнее и в какой ситуации, есть ли вообще разница?
Ответ
#define - это макрос препроцессора, он просто выполняет замену строки текста на своё содержимой. До c++11 его имело смысл использовать для глобальных численных констант.
const - это квалификатор типа, говорящий, что переменная не должна меняться после инициализации. Но эта инициализация где-то должна произойти, и от константности можно вручную избавиться при помощи const_cast.
В c++11 был добавлен квалификатор constexpr, который указывает на то, что переменная может как-то изменяться только во время компиляции, но не во время выполнения. Детали зависят от версии стандарта. Теперь можно без проблем объявлять статические константы, в том числе сложных типов. Например:
namespace constants{
static constexpr double g = 9.8;
struct minus_fn_impl{
template
static constexpr minus_fn_impl minus_fn;
}
...
double v = 5.3;
double r = constants::minus_fn(v, constants::g); // не нужно инициализировать функциональный объект, как в случае std::minus
Комментариев нет:
Отправить комментарий