Информация об изменениях

Сообщение Re[3]: И все-же - ликбез по C++ времени компиляции от 08.07.2023 6:39

Изменено 08.07.2023 7:01 rg45

Re[3]: И все-же - ликбез по C++ времени компиляции
Здравствуйте, Shmj, Вы писали:

R>>Неуч, if constexpr:


S>А где бы прочитать про этот второй вид C++ и его особенности. Как он взаимодействует с первым С++?


И кстати, количество способов реализовать компайл-тайм факториал в С++ слегка больше одного.

Например, можно через специализацию шаблона функции:

template <size_t N>
constexpr size_t factorial() { return N * factorial<N - 1>(); }

template <>
constexpr size_t factorial<0>() { return 1; }


можно, через fold expressions:

template <size_t...I>
constexpr size_t product(std::index_sequence<I...>) { return (... * (I + 1)); }

template <size_t N>
constexpr size_t factorial() { return product(std::make_index_sequence<N>{}); }


Можно через шаблон класса и пр.
Re[3]: И все-же - ликбез по C++ времени компиляции
Здравствуйте, Shmj, Вы писали:

R>>Неуч, if constexpr:


S>А где бы прочитать про этот второй вид C++ и его особенности. Как он взаимодействует с первым С++?


И кстати, количество способов реализовать компайл-тайм факториал в С++ слегка больше одного.

Например, можно через специализацию шаблона функции:

template <size_t N>
constexpr size_t factorial() { return N * factorial<N - 1>(); }

template <>
constexpr size_t factorial<0>() { return 1; }


можно, через fold expressions:

template <size_t...I>
constexpr size_t product(std::index_sequence<I...>) { return (1 * ... * (I + 1)); }

template <size_t N>
constexpr size_t factorial() { return product(std::make_index_sequence<N>{}); }


Можно через шаблон класса и пр.