Ternick
@Ternick

Создание случайной строки в момент компиляции?

Я уяснил для себя новый тип функций constexpr, который выполняется на стадии компиляции, но тут такая штука, что функции типа constexpr не выполняют в своём теле функции у которых тип не constexpr.
То есть я из функции с типом constexpr я не смогу вызвать ни MessageBox, ни rand.
В интернете пишут, что нужно единственный образ получить псевдослучайное число брать за основу макросы(__TIME__, __TIMESTAMP__ и т.д.). Так оно и есть или можно решить этот вопрос ?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
1.Текущий timestamp часто берут для инициализации стандартного С/С++ генератора случайных чисел.
Пример можно найти, например тут: https://en.cppreference.com/w/cpp/numeric/random/srand

2.Вам придется реализовать свой собственный constexpr rand(), т.к. стандартный не constexpr.

3.Вам не нужно в принципе вызывать MessageBox и любые подобные функции на стадии компиляции программы.
constexpr функции выполняются компилятором, поэтому на них накладываются достаточно серьезные ограничения. Когда программа исполняется вместо вызова constexpr функции уже стоит ранее вычисленное компилятором значение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fzfx
@fzfx
18,5 дм
Функция, которая выполняется на стадии компиляции, не может содержать в себе код, который не способен выполняться на стадии компиляции, поскольку это препятствовало бы выполнению функции на стадии компиляции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы