我有一个散列函数,我想用 C++20 consteval 实现它,以确保我想在编译时评估的输入将在运行时之前完成。那是常量和硬编码内容。但是,稍后我需要将它们与运行时/动态变量进行比较,为了使 equals() 起作用,我必须计算运行时变量的哈希值,并且需要从运行时调用完全相同的算法。
本能是实现它两次(一次用于编译时,一次用于运行时),但是当代码本质上是相同的算法/代码时,复制代码感觉是错误的。有没有更聪明的方法(模板变量或其他东西)来拥有一个可以根据需要为两种目的实例化的算法?
C++14 及更高版本有很多很棒的功能,我想知道是不是我忘了什么。最好我想使用纯 C++ 特性并避免像 std boost 等帮助库......

最佳答案


将您的函数编写为 constexpr ,然后,如果您想保证在编译时完成特定结果,请将结果写入 constexpr 变量:

constexpr int f(...) { ... }

constexpr int compile_time_result = f(...);
如果在编译时无法计算结果,您将收到错误消息。
如果不在意,取出变量的constexpr:
int maybe_runtime_result = f(...);

关于c++ - 如何在允许运行时调用的同时保证算法的编译时评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65218367/

10-13 05:55