[英]Using std::hash<uint64_t> for custom class
以下两个 return 语句是否返回相同的内容?
class NonTrivialClass
{
public:
size_t hash() const
{
// variation 1
return std::hash<uint64_t>::_Do_hash(my_val_);
// variation 2, wanted to avoid creating the named object
std::hash<uint64_t> hasher;
return hasher(my_val_);
}
private:
// relevant info for hashing purposes is stored here
uint64_t my_val_;
}
我直觉地想写一些类似的东西
return std::hash<uint_64>(my_val_);
哪个没有编译(因为我没有初始化结构的实例?!)。 还有另一种我失踪的方式吗? 是否担心创建命名的 hasher 结构是不必要的?
一种更简单的编写方法是使用临时对象:
return std::hash<uint64_t>{}(my_val_);
它与您的第二种方法做同样的事情。
我不能确定_Do_hash
做了什么,但无论如何它是非标准的,不应使用,以避免可移植性问题。
由于谷歌搜索没有找到该函数的任何文档,我认为它是您正在使用的标准库实现的实现细节,而不是由用户代码使用。 因此,您根本不应该使用它,即使您不关心可移植性。
另请注意,无论您使用带有命名变量的方法还是我使用临时方法的方法,性能都无关紧要。 编译器几乎肯定会从中生成相同的代码。 您使用哪种纯粹是代码风格的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.