#cpp #visual_cpp #cpp11
Очередной чисто теоретический вопрос - а как убедиться, что constexpr действительно вычисляется во время компиляции? Похоже, что по крайней мере Visual C++, не сумев справиться с constexpr-функцией, никак об этом не сообщает. Как паллиатив для целочисленного результата можно применить класс-повторилку, типа templatestruct 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; }
Комментариев нет:
Отправить комментарий