Страницы

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

пятница, 13 марта 2020 г.

Как убедиться, что constexpr действительно вычисляется во время компиляции?

#cpp #visual_cpp #cpp11


Очередной чисто теоретический вопрос - а как убедиться, что constexpr действительно
вычисляется во время компиляции? Похоже, что по крайней мере Visual C++, не сумев справиться
с constexpr-функцией, никак об этом не сообщает.

Как паллиатив для целочисленного результата можно применить класс-повторилку, типа 

template 
struct val
{
    static int const value = N;
};


и тогда для

constexpr int complexFunc(){...}


результат использовать как 

val::value


Но это и громоздко, и ограниченно пригодно...
    


Ответы

Ответ 1



constexpr гарантирует что функция может быть вызвана на этапе компиляции, если она вызвана в контексте, в котором разрешены только выражения времени компиляции - параметры шаблона, constexpr переменные, другие constexpr функции, размер массива, целочисленные static const члены которые инициализированы при объявлении, инициализаторы в enum. По этому достаточно использовать constexpr переменные, тогда они будут вычислены на этапе компиляции: constexpr int f() { return 42; } int main() { constexpr int x = f(); return x; }

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

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