我有一个 consteval crc32 函数,它在编译时工作得很好。我希望这个函数用于另一个常量内联函数。
下面是一个代码示例,以便更好地理解:
unsigned int consteval strsum(const std::string str) {
auto n = 0;
for (int i = 0; i < str.size(); i++) n += str.at(i);
return n;
}
void _printHash(const unsigned int hash) {
printf("%d", hash);
}
__forceinline void printHash(const std::string str) {
_printHash(strsum(str));
}
int main(int argc, char* argv[]) {
printHash("abc");
}
我希望这段代码编译为:
int main(int argc, char* argv[]) {
_printHash(/* hash constant */);
}
相反,我收到 C7595 错误:对 consteval 函数的调用不是常量表达式。
有没有办法在 MSVC 上实现想要的行为?