为什么{}用于访问std :: hash中的operator()?

时间:2017-09-13 15:19:04

标签: c++ c++11 hash unordered-map c++-standard-library

在阅读用于std :: unordered_map的std :: hash示例时,我注意到{}正在访问operator()函数。

http://en.cppreference.com/w/cpp/utility/hash

result_type operator()(argument_type const& s) const
{
    result_type const h1 ( std::hash<std::string>{}(s.first_name) );
    result_type const h2 ( std::hash<std::string>{}(s.last_name) );
    return h1 ^ (h2 << 1); // or use boost::hash_combine (see Discussion)
}

这里使用{}代表什么?

2 个答案:

答案 0 :(得分:7)

std::hash<T>类型不是函数。

std::hash的实例有operator()来执行哈希。

所以std::hash<std::string>是一种散列类型。然后{}创建该类型的实例。 (s.first_name)operator()上调用std::hash<std::string>

std::hash<std::string>{}(s.first_name);
^                     ^       ^
|                     |   call operator() on that instance
type of hasher        |
                create an instance of that type

答案 1 :(得分:3)

std::hash不是一个函数,而是一个类,更具体地说是一个函子。因此,您必须先创建该类的对象,然后才能调用其operator()

enter image description here