Страницы

Поиск по вопросам

суббота, 23 марта 2019 г.

Разница между define и const [дубликат]

На данный вопрос уже ответили: Различие 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 T operator () (const T& lha, const T& rha){ return lha - rha; } };
static constexpr minus_fn_impl minus_fn; }
...
double v = 5.3; double r = constants::minus_fn(v, constants::g); // не нужно инициализировать функциональный объект, как в случае std::minus

Комментариев нет:

Отправить комментарий