Re[5]: constexpr это рекомендация?
От: Voivoid Россия  
Дата: 12.04.24 10:12
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>так вот беда как раз в том, что никаких гарантий constexpr не даёт. Это только подсказка компилятору. Часто выбешивает, что надо писать тесты на то, что функция может быть вызвана в compile_time.

Не совсем понятно о чем именно речь. А можно пример кода?

А вообще:
constexpr size_t fac(size_t n) // спецификатор constexpr гарантирует, что функция вычислится в compile-time ЕСЛИ её вызывают в compile-time контексте
{
    if (n == 0) return 1;
    return n * fac(n - 1);
}

int main() {    
    auto r1 = fac(5); // здесь никаких гарантий compile-time выполнения нет. Оптимизатор возможно заоптимизирует, а возможно и нет.
    constexpr auto r2 = fac(5); // здесь гарантируется, что переменная r2 будет вычислена на этапе компиляции

    int arr1[fac(5)]; // размеры массивов будут вычислены на этапе компиляции
    int arr2[r2];
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.