本文介绍了为什么使用{}来访问std :: hash中的operator()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

While reading the examples of std::hash used for std::unordered_map, I noticed that the operator() function was being accessed by {}.

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)
}

这里{}的使用代表什么?

What does the use of {} here represent?

推荐答案

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

std::hash的实例具有一个执行哈希的operator().

An instance of std::hash has an operator() that does the hash.

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

So std::hash<std::string> is a hashing type. {} then creates an instance of that type. (s.first_name) calls operator() on a 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

这篇关于为什么使用{}来访问std :: hash中的operator()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 23:31