如何理解这段代码片段中的两对括号?

toc*_*fty 42 c++ hash

此代码来自C++入门 p.446:

return hash<string>() (sd.isbn());
Run Code Online (Sandbox Code Playgroud)

我不理解带有两对括号的返回表达式.本书前面没有类似的语法.

Nat*_*ica 52

std::hash是一种类型.你在这里做的是构建一个临时std::hashhash<string>(),然后(sd.isbn())调用operator()临时传递它sd.isbn().

它会是一样的

std::hash<std::string> temp;
return temp(sd.isbn());
Run Code Online (Sandbox Code Playgroud)

有关使用具有operator()see:C++ Functors的对象及其用途的更多阅读

  • 我认为这是卷括号初始化的另一个好参数,以澄清你正在构造一个对象,例如:`return hash <string> {}(sd.isbn());` (3认同)
  • 补充一下这个好答案。`temp(sd.isbn())` 在这里可能看起来很混乱,因为它是一个对象。该对象基本上用作函数对象,[functor](http://stackoverflow.com/questions/356950/c-functors-and-their-uses)。 (2认同)