在阅读用于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)
}
这里使用{}代表什么?
答案 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)