为什么在 std::hash 中使用 {} 访问 operator()?
Why is {} used to access operator() in std::hash?
在阅读用于 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)
}
这里的{}代表什么?
std::hash<T>
是类型而不是函数。
std::hash
的一个实例有一个执行散列的 operator()
。
所以std::hash<std::string>
是一种散列类型。 {}
然后创建该类型的实例。 (s.first_name)
在 std::hash<std::string>
上调用 operator()
。
std::hash<std::string>{}(s.first_name);
^ ^ ^
| | call operator() on that instance
type of hasher |
create an instance of that type
std::hash
不是函数,而是 class,更具体地说是函子。所以你必须先创建一个 class 的对象,然后才能调用它的 operator()
.
在阅读用于 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)
}
这里的{}代表什么?
std::hash<T>
是类型而不是函数。
std::hash
的一个实例有一个执行散列的 operator()
。
所以std::hash<std::string>
是一种散列类型。 {}
然后创建该类型的实例。 (s.first_name)
在 std::hash<std::string>
上调用 operator()
。
std::hash<std::string>{}(s.first_name);
^ ^ ^
| | call operator() on that instance
type of hasher |
create an instance of that type
std::hash
不是函数,而是 class,更具体地说是函子。所以你必须先创建一个 class 的对象,然后才能调用它的 operator()
.