Допустим, что у вас есть функция, которая генерирует определенный токен безопасности для вашего приложения, например, некоторую соль хешей, или, может быть, симметричный или асимметричный ключ.Как обеспечить, чтобы функция constexpr никогда не вызывалась во время выполнения?
Теперь скажем, что у вас есть эта функция в C++ как constexpr и что вы создаете ключи для своей сборки на основе некоторой информации (например, номер сборки, временная метка, что-то еще).
Вы, будучи добросовестным программистом, убедитесь в этом и позвоните соответствующим образом, чтобы убедиться, что он вызван только во время компиляции, и, таким образом, мертвый стриппер удаляет код из окончательного исполняемого файла.
Однако вы никогда не можете быть уверены, что кто-то другой не будет называть его небезопасным способом, или что, возможно, компилятор не отключит функцию, а затем ваш алгоритм маркера безопасности станет общедоступным знания, облегчающие его, были бы злоумышленниками, чтобы угадать будущие жетоны.
Или, в безопасности, скажем, функция занимает много времени, и вы хотите убедиться, что она никогда не происходит во время выполнения и вызывает плохой пользовательский интерфейс для ваших конечных пользователей.
Есть ли способ гарантировать, что функция constexpr никогда не будет вызвана во время выполнения? Или поочередно, бросать утверждение или подобное во время выполнения было бы хорошо, но не так идеально, как ошибка компиляции.
Я слышал, что существует какой-то способ включения типа исключения, которого не существует, так что если функция constexpr не будет отключена, вы получите ошибку компоновщика, но слышали, что это работает только на некоторых компиляторах.
Отдаленно связанный с этим вопрос: Force constexpr to be evaluated at compile time
Одно из возможных решений: вы реализуете эту функцию строго в терминах 'template <...> struct xyz {static constexpr long long value = ...; } '. Нет, действительно, я имею в виду, что не использую 'constexpr function', а реализую вычисления строго в шаблонах структуры. –
Обратите внимание, что в целом соглашается, что, зная ваш алгоритм, достаточно, чтобы он был сломан, тогда ваш алгоритм - дерьмо. – immibis
Это хороший общий комментарий для людей, которые могут столкнуться с этим вопросом и хотят попробовать, но FWIW мои потребности не связаны с безопасностью. –