Очередной чисто теоретический вопрос - а как убедиться, что constexpr действительно вычисляется во время компиляции? Похоже, что по крайней мере Visual C++, не сумев справиться с constexpr-функцией, никак об этом не сообщает.
Как паллиатив для целочисленного результата можно применить класс-повторилку, типа
template
и тогда для
constexpr int complexFunc(){...}
результат использовать как
val
Но это и громоздко, и ограниченно пригодно...
Ответ
constexpr гарантирует что функция может быть вызвана на этапе компиляции, если она вызвана в контексте, в котором разрешены только выражения времени компиляции - параметры шаблона, constexpr переменные, другие constexpr функции, размер массива, целочисленные static const члены которые инициализированы при объявлении, инициализаторы в enum.
По этому достаточно использовать constexpr переменные, тогда они будут вычислены на этапе компиляции:
constexpr int f() { return 42; }
int main() {
constexpr int x = f();
return x;
}
Комментариев нет:
Отправить комментарий