提问人:Bard 提问时间:11/2/2023 最后编辑:genpfaultBard 更新时间:11/2/2023 访问量:91
串联和乘以幻数的问题。C++语言
Problem with consteval and multiplying magic numbers. c++
问:
好的,所以我正在尝试制作一个可以对字符串进行哈希处理的函数。
consteval int hash_string(const char* str)
{
constexpr int magic_number = 13371337;
int num1 = 1337;
int num2 = 7331;
//do stuffz here//
return num1 + num2 * magic_number; //error
return num1 + num2; //okay :D
}
我假设这是由于整数溢出造成的,并且编译器无法解决它。但这是算法的一部分,我不在乎。
我希望 consteval 能够解决该函数,因为它都是编译时的东西。
答:
2赞
Nicol Bolas
11/2/2023
#1
但这是算法的一部分,我不在乎。
但是你应该关心它,因为 C++ 不允许它。有符号整数溢出是未定义的行为。在不断的评估过程中,如果你引发了未定义的行为,你的程序就格式不正确。
因此出现编译错误。
如果您的算法依赖于未定义结果的内容,则需要更改您的算法。
评论
unsigned
std::uint64_t
int
const std::string_view
const char*