繁体   English   中英

使用 std::hash<uint64_t> 自定义类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM