И все-же - ликбез по C++ времени компиляции
От: Shmj Ниоткуда  
Дата: 08.07.23 04:54
Оценка: :))
Я понял вот какую фишку.

Многие думают что C++ только один. На самом деле их два: обычный C++ и C++ времени компиляции. Совершенно разные языки, но есть кое-что общее.

Вот, к примеру, есть такая функция:

template <int N>
constexpr int factorial() {
    if (N <= 1)
        return 1;
    else
        return N* factorial<N - 1>();
}


Пробую VS последней версии и последний стандарт C++.

Что скажете? Думаете проканает для режима компиляции? А хрена с два — пишет что функция слишком сложная. А вот так уже проканало:

template <int N>
constexpr int factorial() {
    if (N <= 1)
        return 1;
    else
        return 2;
}


Т.е. предкомпилятор довольно ограничен, но не ясно насколько и различается ли он для разных компиляторов (препроцессоров?).

Что интересно, если функция не constexpr — то if/else вообще будут проигноированы. Но как?

Вопрос такой. Есть ли краткая статья, ликбез, где бы рассматривалось зачем все это нужно и как его использовать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.