在 C++11 中,可以通过如下方式获得一个 string 变量的哈希值: std::size_t h1 = std::hash<std::string>{}("Some_String"); 这段代码看起来干净而简单。但我有两个问题: 为什么我们需要在这里使用花括号? 是否可能在大括号内进行转义?
花括号用于对类型为std::hash<std::string>的对象进行值初始化。由于该对象具有重载的operator(),因此可以调用它。或者,您可以创建一个命名对象:std::hash<std::string> H; auto h1 = H("Some_String");
std::hash
实例是_类型_,而不是函数。例如,这允许在std
命名空间中为用户定义的类型专门化std::hash
,而在C++20中将不再允许为_模板函数_进行此操作。 - Daniel Langr