我正在使用C ++中的Hashtable。哈希函数:
// Default hash function class
template <typename K>
struct KeyHash {
unsigned long operator()(const K& key) const {
return reinterpret_cast<unsigned long>(key) % TABLE_SIZE;
}
};
然后当我声明哈希表为:
HashTable<int, std::string> hmap;
显示:
来自&#39; int&#39;的无效演员表输入&#39; unsigned_long_int&#39;
这里的reinterpret_cast<unsigned long>
问题是什么?
答案 0 :(得分:5)
您可以在两个整数类型(句点)之间reinterpret_cast
。这不是reinterpret_cast
的用途。如果要在两种整数类型之间进行转换,请使用static_cast
。
如果您的目标是真正&#34;重新解释比特模式&#34;然后你必须转向引用。也就是说,如果reinterpret_cast<unsigned long&>(x)
是类型x
的左值,则int
有效。但是现在你进入危险区域,因为这通常是未定义的行为,并且可能在32位x86平台上工作,但是在unsigned long
长于int
的64位x86平台上会做坏事。 {1}}。
答案 1 :(得分:2)
根据C ++标准(5.2.10 Reinterpret cast)
2 reinterpret_cast运算符不应丢弃constness (5.2.11)。 整数,枚举,指针或的表达式 指向成员的类型可以显式转换为自己的类型; 这样的转换会产生其操作数的值。
改为使用static_cast
。