Top.Mail.Ru
Ответы

В чем отличие #define от constexpr?

Есть две константы:
#define a 5
И
constexpr int a = 5;
Как я понимаю, все a будут заменены на 5 компилятором без создания переменных. Верно?

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

#define - это тупая подстановка '5' в исходный код программы: везде, где встретится 'a'. Без какого-либо контроля и до начала собственно компиляции.

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

Но в любом случае, компилятор сначала проверит, что объявленный тип значения допустим в месте его использования. И если недопустим - выдаст вменяемое сообщение об ошибке.